SwiftUI中如何从JSON文件获取指定索引的国家数据
解决SwiftUI中获取指定索引的国家数据问题
你的错误原因是混淆了数组索引和字符串索引:你写的item.country[index]是试图访问字符串country的第index个字符,但Swift中字符串的索引不能直接用Int类型,必须使用String.Index,因此报错。而你的真实需求是获取数组quizzs中索引为index的Quizz对象的国家信息,并非遍历每个元素时操作字符串。
正确实现方式
直接通过数组下标获取指定索引的元素,同时处理数组为空或索引越界的情况,避免崩溃:
struct Test: View{ let quizzs = Bundle.main.decode([Quizz].self, from: "capitals.json") @State var index = 0 var body: some View{ ScrollView { VStack{ // 验证数组非空且索引在有效范围内 if let quizzList = quizzs, index >= 0, index < quizzList.count { Text(quizzList[index].country) } else { Text("无数据或索引超出范围") } } } } }
进阶:添加安全下标扩展(可选)
如果不想每次都写判断逻辑,可以给数组添加安全下标扩展,简化代码:
// 给所有集合类型添加安全下标 extension Collection { subscript(safe index: Index) -> Element? { indices.contains(index) ? self[index] : nil } } // 使用安全下标简化视图代码 struct Test: View{ let quizzs = Bundle.main.decode([Quizz].self, from: "capitals.json") @State var index = 0 var body: some View{ ScrollView { VStack{ if let targetQuizz = quizzs?[safe: index] { Text(targetQuizz.country) } else { Text("无效的索引或无数据") } } } } }
内容的提问来源于stack exchange,提问作者James Pat
相关产品推荐
相关产品推荐

