2

JSONを解析するとき、私はNSDictionaryを取得し、一度に1つの(既知の)キーを調べます。バグをデバッグするとき、私は疑問に思い始めました:欠落しているキーとゼロの値をどのように処理する必要がありますか?

以前は、次のようなものを使用して、キーが存在するかどうかを確認していました。

    if ([dict objectForKey:@"public"])
        newItem.isPublic = [dict objectForKey:@"public"] ? YES : NO;

しかし今、私はObjective-Cオブジェクトリテラルを使用してこれを書きました。疑問に思い始めたばかりですが、このチェックは実際に何をするのでしょうか。

    if (dict[@"public"])
        newItem.isPublic = dict[@"public"] ? @YES : @NO;

nilまたは[NSNullnull]と照合する必要がありますか、それとももっと簡単で明白な方法がありますか?

4

1 に答える 1

8

新しいリテラル構文は、ここでは違いはありません。dict[@"public"]コードはに変換されます。これ[dict objectForKeyedSubscript:@"public"]は、と同じであると文書化されておりvalueForKey:、はを呼び出しますobjectForKey:

条件付きテストに関しては、書き込みif ([dict objectForKey:@"foo"])はと同じif ([dict objectForKey:@"foo"] != nil)です。つまり、[NSNull null]ここではtrueとしてカウントされるため、別の動作が必要かどうかを明示的に確認する必要があります。ゼロを辞書に直接格納することはできません。ゼロは、でラップする必要があり、これもNSNumber真の値として扱われます。

Objective-Cリテラルの仕様NSDictionaryクラスリファレンスも参照してください。

于 2012-12-04T10:05:49.817 に答える