NSPredicate evaluateWithObject:?任何对象?

时间:2015-11-23 06:26:56

标签: objective-c nspredicate

有没有人知道哪些文档可以解释您可以传递给evaluateWithObject:(id)object

的确切内容

因为它需要一个(id),我认为这意味着我可以直接传递任何东西。

但如果是这种情况,您如何区分由于某个对象导致的失败与无法确定如何验证的失败以及未成功应用评估的失败之间的差异。

1 个答案:

答案 0 :(得分:0)

任何对象都可以针对任何谓词进行验证,除非该对象不对所使用的运算符起作用。如果发生这种情况,您将获得运行时异常,因此您知道自己做错了。

示例

@import Foundation;
#import <objc/runtime.h>

int main(int argc, char **argv)
{
    NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"moo"];

    NSLog(@"%hhd", [p evaluateWithObject:@"moo"]);
    NSLog(@"%hhd", [p evaluateWithObject:@[]]);

    return 0;
}

编译:{{1​​}}

以:clang -framework Foundation -fobjc-arc -fmodules test.m

运行

输出:

./a.out