4

と同じように:

"APP_INFO" : {
            "v":"2.0",
            "appid":"1",
            "lang":"zh-Hans",
             }

コンパイル時の定数ではないため、init メソッドを使用できません。

4

2 に答える 2

8

Clang 3.2以降、使用可能な文字通りのコンテナー構文があります。

NSDictionary * d = @{
    @"APP_INFO" :  
    @{
        @"v" : @"2.0",
        @"appid" : @"1",
        @"lang" : @"zh-Hans",
}};

これにより、 /または他のメソッドNSDictionaryを使用した場合と同じように、通常の不変インスタンスが作成されます。それは単に素晴らしい構文糖衣です。allocinitWithObjects:forKeys:

噂によると、Appleもまもなくこれをコンパイラに追加する予定です。

于 2012-07-23T03:44:08.910 に答える
1
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"2.0", @"v", @"1", @"appid", @"1", @"zh-Hans", @"lang", nil];

これにより、コンパイル時に内容が固定される不変のディクショナリが作成されます。

同じ init メソッドを使用して、実行時に新しい辞書を作成できます。

id object1 = ...;
...
NSString *key1 = ...;
...

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:object1, key1, object2, key2, object3, key3, nil];
于 2012-07-23T03:27:44.317 に答える