1

好的,所以我在 Xcode、Apple 的开发者网站和 google 上进行了搜索,甚至下载并搜索了 pdf 版本的 Key-Value Coding Programming Guide 和 Collections Programming Topics,但我在任何地方都找不到这种语法。以下代码段的第二行是做什么的,我在哪里可以找到它的详细信息?

NSMutableDictionary *change = [NSMutableDictionary new];
change[@(someVariable)] = @(someOtherVariable);

我不知道我是不是脑子里放了个屁,或者我以前是否真的从未见过这种情况,但我真的很烦我找不到它的文档。

4

3 回答 3

3

这是最近在 Objective C 中引入的新语法。它记录在此链接中。

向下滚动到对象下标语法以获得解释:

Objective-C 对象指针值现在可以与 C 的下标运算符一起使用。

您的代码片段翻译为

[change setObject:@(someOtherVariable) forKeyedSubscript:@(someVariable)];

为了支持此处描述的新语法,引入了 Objective-C @-expression 语法。-@表达式在文档底部进行了解释。

于 2013-05-18T17:12:51.717 回答
1

http://clang.llvm.org/docs/ObjectiveCLiterals.html

查看文档大约一半的“示例”

于 2013-05-18T17:12:38.963 回答
0

这里实际上发生了两件事:

  1. 字典(和数组)下标

    change[key]
    

    这是一个新的语法糖

    [change objectForKey:key]
    

    或者,如果用作左值,它是语法糖

    [change setObject:value forKey:key]
    

    对于这里真正发生的事情(objectForKeyedSubscript:setObject:forKeyedSubscript:),请参阅http://www.aeth.com/iOSBook/ch10.html#_nsdictionary_and_nsmutabledictionary

  2. 数字文字

    @(someVariable)
    

    这是一个新的编译器指令,相当于:

    [NSNumber numberWithInt: someVariable]
    

    除了实际上它将使用numberWithInt:,numberWithFloat:或任何基于someVariable.

    再次,请参阅http://www.aeth.com/iOSBook/ch10.html#_nsnumber

于 2013-05-18T17:20:57.183 回答