【问题标题】:Collection Object operator for @firstObject Key-value coding KVC@firstObject 键值编码 KVC 的集合对象运算符
【发布时间】:2013-06-20 04:20:34
【问题描述】:

我经常需要检索属于 Set 的第一个对象。 (使用该对象作为该集合的代表。)

我设想了一个集合对象运算符,类似于

@unionOfObjects

但是很明显

@firstObject

有没有可能创建这样的Collection运算符!

【问题讨论】:

    标签: cocoa cocoa-bindings key-value-coding


    【解决方案1】:

    目前无法定义自定义集合运算符。然而,由于一些内部魔法,有一个有趣的解决方案:

        NSSet *testSet = [NSSet setWithArray:@[@"one", @(1)]];
    
        id object = [testSet valueForKey:@"@anyObject"];
        NSLog(@"anyObject (%@): %@", NSStringFromClass([object class]), object);
    

    UPD:忘了提另一个方便的技巧:你可以在NSArray上使用@lastObject

    【讨论】:

    • anyObject 可能会起作用。谢谢。生病试一试。在初次查看时,如果您有 nsset,为什么不直接使用 [testSet anyObject] 与 [testSet valueForKey@"anyObject"]。本质上,它看起来像 Sets 和 Arrays 的一些访问器方法(lastObject、anyObject)是键值编码的。
    • @GabeRainbow,您的问题是关于使用集合运算符。你绝对可以使用anyObject。警告,valueForKey:@"anyObject" 将不起作用。 valueForKey:@"@anyObject" 将。这是由于集合运算符的一些实现细节造成的。
    • 感谢您的澄清。我注意到 Apple 文档中的 @"" 拼写错误一定会引起一些头痛。肯定 anyObject 会为我的目的工作,因为我在集合中寻找任何有代表性的对象而不是特定的对象,首先是最后一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多