2016-02-09 2 views
0

Я экспериментирую с чем-то дополнительным цепочкой и двумя вопросительными знаками, но я не могу понять одну вещь. У меня есть эта часть кода:Swift 2 вопросительные знаки необязательный цепочка

if let delegate = self.delegate { 
    delegate.webViewControllerDidCancel() 
} 
else { 
    self.navigationController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 
} 

что хорошо. Работает именно то, что я хочу. Если кто-то соответствует протоколу, звоните webViewControllerDidCancel, иначе просто dismissViewController.

Однако я пытался сделать то же самое так

self.delegate?.webViewControllerDidCancel() ?? self.navigationController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 

который кажется законным мне, а также работает, но XCode дает мне желтый восклицательный знак, говорящий

Результат вызова к '??' не используется

Этого я не могу понять. Это ?? даже должен работать таким образом?

+0

Это не кажется законным, если '-webViewControllerDidCancel' возвращает' void' или что-то еще, что не поддается анализу. – holex

+0

Да, это пусто. Так что это, вероятно, причина для предупреждения. В любом случае, закончил использовать более длинную версию, но я должен сказать, что это тоже работает (не уверен в побочных эффектах) – jovanjovanovic

ответ

2

Полагает, что оператор ?? предназначен для использования при настройке переменных при работе с опциями, и, хотя он, похоже, работает как механизм для управления тем, какая функция срабатывает - это не его прямое использование. Из documentation:

Нили Оператора коалесцирующего этого сокращения для кода ниже:

a != nil ? a! : b 

Нили оператора коалесцирующего обеспечивает более элегантный способ инкапсуляции этой условную проверки и разворачивания в краткой и удобочитаемой форме.

Все примеры документации также связаны с переменной, поэтому, когда функциональность оператора соответствует вашему варианту использования, предупреждение Xcode связано с тем, что вы не используете оператора для его предполагаемого использования.

+0

спасибо за ответ, вероятно, что оператор коллимации nil ожидает некоторого присвоения слева и когда он используется с функциями, этого не происходит. – jovanjovanovic

+0

Несомненно, я согласен - сообщение об ошибке очень свидетельствует о том, что вы хотите что-то сделать с результатом выражения с помощью оператора. Я бы предположил, что очень мало побочных эффектов, если таковые имеются, от использования его, как есть. – DJB

Смежные вопросы