我有一个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";
答案 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)
文字强>
文本字段显示的文本。@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通常是不好的做法。空文本字段具有值。它只是一个空字符串。