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

Swift 5如何遍历JSON数组提取trialid传入仅接收单值的函数

解决方案

首先修正你现有代码的两处问题:

  • 解码语法错误:JSONDecoder().decode第一个参数需要传入要解码的目标类型,你之前传入的是实例变量structure,需要改为[testStructure].self
  • 遍历对象错误:你解码得到的nav才是接口返回的结构体数组,需要遍历nav而非空的全局structure变量

遍历逻辑写法

如果你的目标函数支持接收可选Int类型,直接写:

nav.forEach { item in
    // yourFunc是你要调用的、仅接收单个trialid的函数
    yourFunc(item.trialid)
}

如果目标函数要求必须传入非空Int,加层解包过滤空值即可:

nav.forEach { item in
    guard let trialid = item.trialid else { return }
    yourFunc(trialid)
}

完整修正后代码

// 建议类型名首字母大写,符合Swift命名规范
struct TestStructure: Decodable {
    let name: String?
    let orderid: Int?
    let trialid: Int?
}

var structure = [TestStructure]()

func fetch() {
    guard let url = URL(string: "test.com") else { return }
    
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.httpBody = "id=1".data(using: .utf8)
    URLSession.shared.dataTask(with: request) { data, _, error in
        guard let data = data else { return }
        
        do {
            // 修正解码语法,明确指定解码类型为[TestStructure].self
            let nav = try JSONDecoder().decode([TestStructure].self, from: data)
            
            // forEach遍历逻辑
            nav.forEach { item in
                guard let trialid = item.trialid else { return }
                // 替换为你实际要调用的函数
                yourSingleTrialIdHandler(trialid)
            }
            
            // 如果需要把结果存到全局structure变量可以加这句
            structure = nav
            
        } catch {
            print(error)
        }
        
    }.resume()
}

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:39:02