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

您可以使用

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没有条目的情况(初始情况),使用第二个或第三个选项会更好。NSString *notes = ([notesField.text length])?@"hello":(notesField.text);不会像您期望的那样正常工作,因为即使文本字段中没有文本notesField.text也会如此。TRUE所以你应该使用notesField.text.lengthor [notesField.text isEqualToString:@""]

希望现在清楚。

于 2013-03-13T12:36:38.727 回答
3

UITextField状态的文档

text

文本字段显示的文本。

@property(nonatomic, copy) NSString *text

Discussion
这个字符串默认是@""。


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

如果在 Xcode 4.6.3 或更早版本中编译,则 UITextField.text 已(始终)被初始化为 @"",根据文档。

雷达错误:16336863

于 2014-03-16T05:09:07.867 回答
0

UITextField必须使用非零空字符串初始化自身。在您不关心字符串是空还是 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 回答