UItextfield用空字符串初始化?不是空的?也没有?

时间:2013-03-13 12:27:00

标签: ios objective-c uitextfield ternary-operator

我有一个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 个答案:

答案 0 :(得分:3)

您可以使用

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

OR

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

OR

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

对于UITextField没有条目(初始案例)的情况,请使用第二个或第三个选项,这将是更好的选择。 NSString *notes = ([notesField.text length])?@"hello":(notesField.text);无法正常工作,因为即使文字字段中没有文字,notesField.text也会TRUE。因此,您应该使用notesField.text.length[notesField.text isEqualToString:@""]

希望现在明白。

答案 1 :(得分:3)

UITextField

的文档
  

文字

  文本字段显示的文本。

     

@property(非原子,复制)NSString *文本   

  的讨论
  该字符串默认为@“”。


注意:如果在Xcode 5.02或5.1下编译并在早于iOS7的iOS中运行,则UITextField.text初始化为nil。如果在iOS7 +中运行,则初始化为@“”。

如果在Xcode 4.6.3或更早版本中进行编译,那么根据文档,UITextField.text已经(始终)初始化为@“”。

雷达虫:16336863

答案 2 :(得分:0)

UITextField必须使用非零空字符串初始化自身。在您不关心字符串是空还是无的情况下,您只需检查length属性:

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

或使用三元运算符:

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

这是有效的,因为将-length选择器发送到nil对象将返回默认值0。

答案 3 :(得分:-2)

这种方法可以正常使用。

至于为什么它是一个空字符串而不是nil,除非你想表明错误或未初始化状态,否则返回nil通常是不好的做法。空文本字段具有值。它只是一个空字符串。