如果结构字符串元素为nil或swift为空,则从结构数组中删除结构



假设我有一个简单的结构:

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 != "" }

最新更新