You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:20:38