我有一组具有title
属性的对象(NSString
)。我想要检索title
以元音开头的所有对象。我想我可以为每个字母使用NSPredicate
并将它们与NSCompoundPredicate
结合起来,但我们正在寻找更优雅的东西。
有没有办法将BEGINSWITH[cd]
与IN
合并,并传递NSSet
个元音?
有更好的选择吗?
创建一堆谓词然后将它们组合起来似乎很麻烦和丑陋。
答案 0 :(得分:3)
您无需使用公认的详细NSCompoundPredicate
。我认为只编写一个长格式字符串是最实用的。
[NSPredicate predicateWithFormat:
@"title beginswith[cd] 'a' OR "
@"title beginswith[cd] 'e' OR "
@"title beginswith[cd] 'i' OR "
@"title beginswith[cd] 'o' OR "
@"title beginswith[cd] 'u'", title];
使用复制粘贴花了大约30秒。
但是,我认为这不会很好。也许您想考虑通过添加布尔属性startsWithVowel
来创建派生属性,并在title
的setter中更新它。
-(void)setTitle:(NSString)value {
[self willChangeValueForKey:@"title"];
[self setPrimitiveTitle:value];
[self didChangeValueForKey:@"title"];
BOOL result = // your vowel logic
self.startsWithVowel = @(result);
}
答案 1 :(得分:2)
您还可以使用带正则表达式的谓词:
[NSPredicate predicateWithFormat:@"title MATCHES[c] %@", @"[aeiou].*"]