arrays - 使用标准问题过滤数组 | 斯威夫特 5
问题描述
如何过滤以下 JSON 数组以排除值type
=quiet
仅启动test.testid
输入其他所有内容的视图控制器。
目前正在做以下工作:
do {
let nav = try JSONDecoder().decode([TestStruct].self, from: data)
self.viewControllers = nav.map { test -> UIViewController in
let selected = UIImage(named: "Tab4_Large")!
let normal = UIImage(named: "Tab4_Large")!
let controller = storyboard!.instantiateViewController(withIdentifier: String(test.testid))
controller.view.backgroundColor = UIColor.white
controller.floatingTabItem = FloatingTabItem(selectedImage: selected, normalImage: normal)
return controller
}
JSON解码结构:
struct TestStruct: Decodable {
let testname: String
let type: String
let testid: Int
}
需要排除 type = "quiet",但在nav.map
示例 JSON:
[
{
"testname": "Teller",
"type": "load",
"testid": 2
},
{
"testname": "Manager",
"type": "load",
"testid": 8
},
{
"testname": "Tester",
"type": "quiet",
"testid": 8
}
]
解决方案
对于您想要达到的结果。首先需要过滤没有值的数组type = quiet
。
let filteredArray = nav.filter { $0.type != "quiet" }
然后你可以使用compactMap
来获得你想要的结果。我不确定这instantiateViewController
部分是否会按照您想要的方式工作。
但是我添加了一个我尝试过的简单示例Playground
:
var stringData = "[{\"testname\":\"Teller\",\"type\":\"load\",\"testid\":2},{\"testname\":\"Manager\",\"type\":\"load\",\"testid\":8},{\"testname\":\"Tester\",\"type\":\"quiet\",\"testid\":8}]"
let data = stringData.data(using: .utf8)!
struct TestStruct: Decodable {
let testname: String
let type: String
let testid: Int
}
struct ViewControl {
let id: Int
}
do {
let nav = try JSONDecoder().decode([TestStruct].self, from: data)
let filteredArray = nav.filter { $0.type != "quiet" }
print(filteredArray)
let controllers = filteredArray.compactMap({ test -> ViewControl in
let viewControl = ViewControl(id: test.testid)
return viewControl
})
print(controllers)
} catch let error as NSError {
print(error)
}
推荐阅读
- loops - 如何在开始另一个之前完成测试计划中所有线程的完整执行,而不是运行每个线程 X 次
- javascript - 仅适用于 Android 的科尔多瓦日历插件问题
- reactjs - 用玩笑模拟material-ui选择组件
- coq - 在 Coq 中证明等式是对称的
- ios - 谁能给我一个关于 iOS Swift 单元测试的例子?
- xamarin - 如何在 Xamarin 表单中使用 WebtiledLayer?
- angular - 如何将数据值与复选框绑定(选中或未选中)
- javascript - 调用round函数还是使用float操作更便宜?
- javascript - 使用 innerHTML 连接 HTML 时防止 HTML 元素重新加载
- html - flex 卡之间应该有空间嵌套,如何解决?