假设我有一个简单的结构:
struct Model: Codable {
var myVariable: String
var myVariable2: String?
}
有时,myVariable2是一个nil/null值(来自json(或一个文本空字符串,如"。
如何过滤掉空的nil/null并从结构数组中删除该特定结构?
我试过:
Model.compactMap{ $0.myVaraible2 }.flatMap { $0 }
以筛选出特定字符串。但很明显,我没有得到我想要的结果,因为这是错误的。因此,要先过滤掉nil/empty值,然后从数组中删除该结构,应该非常直接,是吗?
我可以在调用JSONDecoder后立即过滤掉吗?
let model = try JSONDecoder().decode([Model].self, from: data)
比如:我知道下一行代码不好
for element in model {
if element.myVariable2.isEmpty || element.myVariable2 == "" {
model.remove(at: what to put here ? )
}
我知道for循环很糟糕!!!但我该如何修复它或做一些更快速的事情呢?
谢谢!
您想要的工具是filter
:
let filteredModels = model.filter { $0.myVariable2 != nil }
这将删除所有对此属性具有nil的元素。但是,该属性仍然是可选的,因为您是以这种方式定义它的。如果您还想检查""
,您可以将其添加到谓词中:
let filteredModels = model.filter { $0.myVariable2 != nil && $0.myVariable2 != "" }