NSArray for NSCompound在 Objective-C 中使用多个可选值的谓词



我有一个 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中。

最新更新