从核心数据中获取,我可以使用NSPredicate来过滤我得到的东西,但只能使用持久属性,而不能使用瞬态属性(as per this article from Apple)。可以使用哪些方法使用瞬态属性或某种计算属性来进一步过滤数据?
(这个问题是an earlier question的改进,过于宽泛。)
答案 0 :(得分:0)
感谢@shallowThought,答案非常简单:
设置了谓词后,过滤使用以下代码行:
let p1 = NSPredicate(format: "lineNumber > 4")
let p2 = NSPredicate(format: "lineNumber < 7")
// let minLineNumberStr = "4"
// let p3 = NSPredicate(format: "lineNumber >= %@", minLineNumberStr) // same as p1, but more flexible
var predArray : [NSPredicate] = []
// Comment out the predicates we DON'T actually use:
predArray.append(p1)
predArray.append(p2)
// predArray.append(p3)
let myPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predArray)
在这种情况下,theLines是从CoreData检索的内容,myPredicate是我想要过滤的内容,例如
{{1}}
在这种情况下,如果谓词包含瞬态属性,则过滤按预期工作(即正确评估瞬态属性);从核心数据中获取时,具有transient属性的过滤器不会抛出错误,但它也不会返回任何结果。
帮助我得出这个答案的资源:
来自We-Heart-Swift.com:"Higher Order Functions: Map, Filter, Reduce, and More
Stack Overflow文章:filteredArrayUsingPredicate does not exist in swift Array(前两个答案)
希望这对我有同样问题的其他人有帮助。