我有一个 CoreData 查询,其中包含一个基本谓词 'pred' 和一个可选的谓词 'fieldQuery'
NSArray *predArray = (fieldQuery != nil) ? @[pred, rangeQuery, fieldQuery] : @[pred,rangeQuery];
我想允许"fieldQuery"和"rangeQuery"都是可选的。我让它像这样工作:
NSArray *predArray;
if (rangeQuery != nil) {
predArray = (fieldQuery != nil) ? @[pred, rangeQuery, fieldQuery] : @[pred,rangeQuery];
} else {
predArray = (fieldQuery != nil) ? @[pred, fieldQuery] : @[pred];
}
NSPredicate *compoundPred = [NSCompoundPredicate andPredicateWithSubpredicates:predArray];
但这并不干净,简洁明了,这样做是因为阵列需要是 NSArray 而不是 NSMutable 阵列。你能建议一个更好的方法来做到这一点吗?
你可以试试下面的代码片段。
NSArray *predArray = @[pred]; // considering pred is non optional.
if (rangeQuery!=nil)
predArray = [predArray arrayByAddingObject:rangeQuery];
if (fieldQuery!=nil)
predArray = [predArray arrayByAddingObject:fieldQuery];
考虑到pred
将永远是非空的将永远在predArray
中。