while ( filename = [filenum nextObject] )
Этот оператор сложен и выполняет несколько операций.
[filenum nextObject]
метод вызывается и возвращает NSString
filename =
присваивается адрес строки NSSt
- значение
filename
оценивается как условие для while ( ... )
работа
Как вы указали, если возвращаемое значение равно nil
, тогда имя файла равно nil
, и условие оценивается как ложное, иначе имя файла не равно нулю, а условие оценивается как истинное.
Многим программистам не нравится этот синтаксис. Это кратко и может быть трудно поддерживать. Компиляторы сгенерируют предупреждение, чтобы обозначить общую синтаксическую ошибку, когда разработчик действительно намерен сравнить два значения,
while ( filename == [filenum nextObject] )
Было бы чище написать исходное утверждение как
while ( (filename = [filenum nextObject]) != nil )
Этот оператор будет вести себя так же, как и оригинал, но устраняет неоднозначность присваивания и условных операций.