2

私は uitextfield を持っています。それが初期化され、それに値を入力しなかった場合、uitextfield の値が null でも nil でもないことがわかりました。

 NSString *notes = (notesField.text)?(notesField.text):@"hello";
    NSLog(@"notes: %@",notes);

メモには何も返さない

    NSString *notes1;

//or use legnth

    if ([notesField.text isEqual:@""]) {
     notes1=@"hello";
        NSLog(@"empty textfield: %@",notes1);
        //then it returns "hello"
    }
    else
    {
        notes1=notesField.text;
        NSLog(@"not empty textfield: %@",notes1);
    }

何故ですか?まだ三項演算子を使用できますか? このような ?

NSString *notes = ([notesField.text length])?(notesField.text):@"hello";
4

4 に答える 4

3

UITextField状態のドキュメント

text

テキスト フィールドによって表示されるテキスト。

@property(nonatomic, copy) NSString *text 説明

この
文字列はデフォルトで @"" です。


注: Xcode 5.02 または 5.1 でコンパイルし、iOS7 より前の iOS で実行している場合、UITextField.text は nil に初期化されます。iOS7 以降で実行している場合は、@"" に初期化されます。

ドキュメントに従って、Xcode 4.6.3 以前でコンパイルする場合、UITextField.text は (常に) @"" に初期化されています。

レーダーのバグ: 16336863

于 2014-03-16T05:09:07.867 に答える
3

使用できます

NSString *notes = ([notesField.text length])?(notesField.text):@"hello";

また

NSString *notes = ([notesField.text length]==0)?@"hello":(notesField.text);

また

NSString *notes = ([notesField.text isEqualToString:@""])?@"hello":(notesField.text);

また、UITextFieldエントリがない場合 (最初のケース) は、2 番目または 3 番目のオプションを使用してください。テキストフィールドにテキストがなくても機能するNSString *notes = ([notesField.text length])?@"hello":(notesField.text);ため、期待どおりに機能しません。したがって、またはを使用する必要があります。notesField.textTRUEnotesField.text.length[notesField.text isEqualToString:@""]

今それが明確であることを願っています。

于 2013-03-13T12:36:38.727 に答える
0

UITextFieldnil 以外の空の文字列で初期化する必要があります。文字列が空であるか nil であるかを気にしない状況では、単純にlengthプロパティを確認できます。

if (!notesField.text.length) {
    // text is nil or empty
}

または、三項演算子を使用します。

NSString *s = notesField.text.length ? notesField.text : @"Default";

-lengthセレクターを nil オブジェクトに送信するとデフォルト値の 0 が返されるため、これは機能します。

于 2013-03-13T12:45:55.460 に答える
-2

そのアプローチはうまく機能します。

nil ではなく空の文字列である理由については、エラーまたは初期化されていない状態を示したい場合を除き、何かに対して nil を返すことは一般的に悪い習慣です。空のテキスト フィールドには値があります。それは単なる空の文字列です。

于 2013-03-13T12:43:31.393 に答える