0

だから私はそう宣言する NSString オブジェクトを持っています:

NSString *XMLOut;

現在、このオブジェクトは空または非空にすることができます。

どうすれば見ることができますか?

If ([XMLOut isEqual:nil]) {
    NSLog(@"XMLOut is empty");
} else {
    NSLog(@"XMLOut is not empty");
  }

それが正しいか ?

4

1 に答える 1

1

現在、このオブジェクトは空または非空にすることができます。

空は と同じではありませんnil

空の文字列は文字列のままです。(ゼロ)がありlength、他の文字列を追加したり、文字列に含めて文字で結合したりできます。

nil対象外です。そこには文字列はありません。そこには何もありません。長さやその他のプロパティはありません。

では、「 である可能性のある文字列を比較して、 であるnilかどうかを判断しnilたい」または「空の可能性がある文字列を比較して、それがであるかどうかを判断したい」という意味ですか?

かどうかのテストnil

isEqual:メソッドのドキュメントには次のように書かれています。

  • anObject: レシーバーと比較されるオブジェクト。である可能性がnilあり、その場合、このメソッドは を返しますNO

したがって、そうXMLOutでない場合はnil[XMLOut isEqual:nil]が返されることが保証されていNOます。

しかし、そうでない場合はどうなりnilますか?

nil基本的にすべての種類のゼロ (構造体などを除く)を返すメッセージNO

つまり、常に次のようになり[XMLOut isEqual:nil]ます。NO

  • XMLOutである場合、質問に関係なくnil、答えは常にです。NO
  • XMLOutではない場合nil、答えはNOに等しい文字列がないためnilです。

==代わりに演算子を使用してください。XMLOut == nilかどうかを正しくテストしXMLOutますnil

空かどうかのテスト

mah がコメントで既に述べたように、文字列にそのlength.

  • XMLOutがの場合nil、質問に関係なく、答えは常にゼロです。
  • が空の文字列の場合XMLOut、その長さはゼロです。
  • XMLOutが他の文字列の場合、その長さは 0 より大きくなります。
于 2013-10-05T18:12:57.073 に答える