以下のコードは、私のアプリで以前持っていたものです。前Objective-C:オブジェクトがクラスに属している場合、これはオブジェクトがnilでもなくnullでもないことを意味しますか?
:
if ([dic objectForKey:@"text"] isKindOfClass:[NSString class]] && [dic objectForKey:@"text"] != nil && [dic objectForKey:@"text"] != [NSNull Null]) {
NSString *text = [dic objectForKey:@"text"];
}
私は下に次のコードを変更しました。
後:
if ([dic objectForKey:@"text"] isKindOfClass:[NSString class]]) {
NSString *text = [dic objectForKey:@"text"];
}
私は結果は同じであるべきと考えているが、後者は滑らかな印象です。ちょうど安全であるために、私はこのことについて納得し、何かを見過ごさないようにこの質問をしています。
私は次のように記述します: 'id obj = dic [@" text "]; if([objc isKindOfClass:[NSString class]]){etc} '。クラスクラスターに対してテストする際には注意が必要です。http://stackoverflow.com/questions/1096772/is-it-safe-to-use-iskindofclass-against-an-nsstring-instance-to-determine-type – Koen
そのクラスター警告は面白い副作用ですが、ここでは実際には適用できません。さらに、その質問に対する2つのトップの答えは、Appleのポイントを真剣に誤解しています。 Appleは、オブジェクトが1つのタイプであることを規定したインタフェースがあれば、その契約に従うべきであり、実際にはクラスタの別のものであるかどうかをテストするべきではないとアドバイスしているだけですそれを利用しようとします。この場合、そのような契約はありません。 – Rob
ところで、あなたは 'dic [@" text "]'を使うことができます。 – Sulthan