我可以通过它们的'旗舰'布尔属性对这个商店对象数组进行排序,但是我怎样才能首先安全地打开'旗舰'属性呢?
let flagshipStores = self.stores.sort {
$0.flagship! && !$1.flagship!
}
Run Code Online (Sandbox Code Playgroud)
mta*_*eel 17
let flagshipStores = self.stores.sort {
guard let flagship0 = $0.flagship, let flagship1 = $1.flagship else { return false }
return flagship0 && !flagship1
}
Run Code Online (Sandbox Code Playgroud)
还有一种方法:将其Bool?转换为a Int,然后比较Ints.您可以指定nil值与非nil值的比较方式.
例如,这个排序nil双方前值false和true:
stores.sort { Int($0.flagship ?? -1) < Int($1.flagship ?? -1) }
Run Code Online (Sandbox Code Playgroud)
这个排序nil都经过值false和true:
stores.sort { Int($0.flagship ?? 2) < Int($1.flagship ?? 2) }
Run Code Online (Sandbox Code Playgroud)
您可以使用相同的模式进行nil比较,使其相同true或相同false.由你决定.
这是另一种方法。
您可以使用flatMapwhich 将删除nil对象并解开存在的对象。然后,强制展开将可以安全地排序:
let flagshipStores = stores.flatMap({ return $0.flagship ? $0 : nil }).sort {
$0.flagship! && !$1.flagship!
}
Run Code Online (Sandbox Code Playgroud)
这将从nil阵列中删除带有旗舰店的商店。
| 归档时间: |
|
| 查看次数: |
6655 次 |
| 最近记录: |