【发布时间】:2021-09-23 13:16:57
【问题描述】:
我有以下从 URL 解码的 JSON 数组,目前我能够解析数组以访问不可见对象,但是如何从 JSON 重新创建仅包含 trialid 的列表数组。
最终结果应如下所示:[27, 33]
以下是JSON数组的结构:
[
{
"name": "mobile",
"orderid": 1,
"trialid": 27
},
{
"name": "mobile",
"orderid": 1,
"trialid": 33
}
]
以下是我目前正在尝试的 - 如何在此处执行 foreach 以循环遍历每个对象:
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 {
let nav = try JSONDecoder().decode(structure, from: data)
}
catch {
print(error)
}
}.resume()
}
struct testStructure: Decodable {
let name: String?
let orderid: Int?
let trialid: Int?
}
更新:
转换为列表数组后,我将执行以下操作以从 Storyboards 启动视图控制器
case .success( let data):
do {
let nav = try JSONDecoder().decode([TestStructure].self, from: data)
self.viewControllers = (nav.map(\.trialid)) { "\($0)" }.map {
let selected = UIImage(named: "Tab4_Large")!
let normal = UIImage(named: "Tab4_Large")!
let controller = storyboard!.instantiateViewController(withIdentifier: $0)
controller.view.backgroundColor = UIColor.white
controller.floatingTabItem = FloatingTabItem(selectedImage: selected, normalImage: normal)
return controller
}
}
catch {print(error)}
这是为了整体建立一个自定义导航栏
问题 1:
无法推断复杂的闭包返回类型;添加显式类型 消除歧义
问题 2:
不能调用非函数类型'[Int?]'的值
【问题讨论】:
-
看到这个答案stackoverflow.com/a/48023537/6884584。你的解码应该是
let nav = try JSONDecoder().decode([TestStructure].self, from: data)。此外,对象类型应以大写字母 (struct TestStructure) 开头。还建议查看swift.org/documentation/api-design-guidelines 以确保一些良好做法;)。 -
@AlexIoja-Yang 请查看我的更新帖子,感谢您的帮助
-
大约 12 小时前您已经有了相同的主题。为什么不编辑最后一个而不是打开一个新的?
标签: swift