Каково значение строки @ ""? - PullRequest
1 голос
/ 19 мая 2011

Я пишу приложение для iPhone, которое использует много редактируемых текстовых полей.Я много узнал о UITextFields и NSStrings, читая различные ссылки в Интернете, но есть некоторые детали, которые все еще ускользают от меня.Когда пользователь вводит неправильное значение для одного из моих текстовых полей, я выкидываю сообщение об ошибке и возвращаю текстовое поле таким же, каким оно было до его ввода.Для пустых текстовых полей я делаю это:

theTextField.text = @"";

Это лучший способ сделать это?Я сам придумал эту идею, я не знаю, есть ли с ней какие-то проблемы (кроме того факта, что она пока работает просто отлично).то же значение, что и строка "nil"?Другими словами, если я установлю строку в @ "" и затем вызову это:

if (myString) {...}

будет ли оператор возвращать истину или ложь?

И последнее.Когда строка NSString инициализируется с использованием этого:

NSString *myString = [[NSString alloc] init];

каково значение этой строки Длина ?

Ответы [ 4 ]

3 голосов
/ 19 мая 2011

Важно понимать, что NSString без символов, таких как @"" или [[NSString alloc] init], все еще является допустимым объектом.Отсюда вытекают все последствия, о которых говорил Ник.

В Objective-C любой действительный объект будет иметь значение "True" в логическом контексте; * nil - единственное значение ложного объекта.1008 * Поскольку эти строки являются допустимыми объектами, они имеют длину, но поскольку они не содержат символов, длина равна 0.

Нет проблем с назначением пустого строкового объекта @"" другому указателю на строкунапример text вашего текстового поля.Поскольку строка без символов по-прежнему является действительным объектом NSString, это то же самое, что и присвоение строки, в которой действительно имеет символы.


*В отличие от так называемых языков сценариев, таких как Python или Perl, где пустая строка или коллекция оценивается как логическое false.

2 голосов
/ 21 марта 2014

Это не ответ на вопрос, но может быть ответом на то, что вы пытаетесь сделать. Если вам интересно, нужно ли вам писать if(str && str.length), чтобы охватить как nil, так и пустые строки, вы не должны. Вы можете использовать только if(str.length), поскольку в Objective-C неизвестные сообщения для nil будут возвращать nil (поэтому [a.b.c.d.e.f doStuff] будет nil, если какое-либо из этих значений в цепочке будет nil). Таким образом, существует редкая потребность в конкретных проверках недействительности, если только вы не хотите точно определить недействительность.

2 голосов
/ 19 мая 2011

Использование

theTextField.text = @"";

абсолютно нормально. Там не должно быть никаких проблем.

if (@"")

оценит как истинное. @"" - это не то же самое, что ноль.

Длина

NSString *myString = [[NSString alloc] init];

равно 0.

0 голосов
/ 30 августа 2011

Check NSString s + string.

...