2015-11-17 2 views
2

Я знаю, что этот вопрос here, но он лишь частично отвечает на мой вопрос, и я не могу прокомментировать ответ, поэтому я вынужден опубликовать здесь.Зачем использовать необязательное связывание?

В чем разница между необязательным связыванием и просто использованием?. Насколько я понимаю, когда вы используете? чтобы развернуть переменную, если она содержит значение nil, тогда код, в котором он используется, не запускается. (Пожалуйста, исправьте меня, если это не так.)

ответ

6

Вы используете optional binding (if let), если у вас есть блок кода, который вы хотите использовать только в том случае, если переменная не является nil.

Вы используете optional chaining (?) только при доступе к свойствам/методам необязательной переменной.

Но есть ситуации, когда необязательная цепочка невозможна (т. Е. Вы не получаете доступ к свойству/методу необязательной переменной, а скорее используете эту переменную для других целей). Например

// let's assume `data` is a `NSData?` optional 

if let imageData = data { 
    let image = UIImage(data: imageData) 

    // now do something with `image` 
} 

Мы делаем это потому, что в этом контексте, мы не можем использовать опциональные цепочки и использование принудительного разворачивания (например let image = UIImage(data: data!)) будет вылетать, если data был nil.