【问题标题】:NSPredicate to find all objects whose title key starts with a vowelNSPredicate 查找标题键以元音开头的所有对象
【发布时间】:2015-05-05 18:10:14
【问题描述】:

我有一组具有title 属性(NSString)的对象。我想检索所有title 以元音开头的对象。我想我可以为每个字母使用NSPredicate 并将它们与NSCompoundPredicate 结合起来,但我正在寻找更优雅的东西。

有没有办法将BEGINSWITH[cd] 与IN 组合并传递一个元音NSSet?

还有更好的选择吗?

创建一堆谓词然后将它们组合起来看起来既麻烦又丑陋。

【问题讨论】:

    标签: objective-c core-data nspredicate


    【解决方案1】:

    您不需要使用公认的冗长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 的设置器中更新它来创建派生属性。

    -(void)setTitle:(NSString)value {
        [self willChangeValueForKey:@"title"];
        [self setPrimitiveTitle:value];
        [self didChangeValueForKey:@"title"];
    
        BOOL result = // your vowel logic
        self.startsWithVowel = @(result);
    }
    

    【讨论】:

      【解决方案2】:

      您也可以使用带有正则表达式的谓词:

      [NSPredicate predicateWithFormat:@"title MATCHES[c] %@", @"[aeiou].*"]
      

      【讨论】:

        猜你喜欢
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多