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
相关产品推荐
相关产品推荐

