我正在执行以下过滤,返回配方列表,按给定的类别名称值进行过滤。
filteredRecipe = filteredRecipe.filter({
if let category = $0.valueForKey("category") as? NSManagedObject {
if let name = category.valueForKey("name") as? String {
return name.rangeOfString(cap) != nil
} else {
return false
}
} else {
return false
}
})
此过滤器与searchBar文本字段相关联,因此我可能在文本字段中具有随机值,这将使filteredRecipe
保存不可靠的数据。
我需要确保当过滤器找不到具有给定类别名称值的filteredRecipe
的任何食谱时,我保持filteredRecipe
不变。
目前,当没有匹配时,它会使filteredRecipe
为空数组[]
。我不确定是什么原因造成的。
答案 0 :(得分:4)
您需要将过滤结果分配给临时变量并检查它是否为空。
let filtered = filteredRecipe.filter({
if let category = $0.valueForKey("category") as? NSManagedObject {
if let name = category.valueForKey("name") as? String {
return name.rangeOfString(cap) != nil
}
return false
})
if !filtered.isEmpty {
filteredRecipe = filtered
}
答案 1 :(得分:0)
另一种方法是使用Collection
属性扩展selfOrNilIfEmpty
,并使用nil合并运算符:
extension Collection {
var selfOrNilIfEmpty: Self {
return isEmpty ? nil : self
}
}
,以及更高版本,在您的代码上:
let filteredRecipe = filteredRecipe.filter { ... }.selfOrNilIfEmpty ?? filteredRecipe