2014-09-24 4 views
4

Это действительно озадачивает меня: В чем разница между неявным образом развернутым дополнительным и самим типом?Разница между типом и явно развернутым типом в Swift

Например,

var s:String! 
var s2: String 

ли не эти два точно так же? Они представляют собой String, которая не может быть nil, так почему на Земле нам нужно! вещь?

ответ

7

неявно развернутый необязательно является опциональным, на самом деле вы можете присвоить значение nil

var s: String! = nil 

Но объявив неявно развернутым, вы не должны добавлять ? каждый раз, когда вы используете его, так , как указано в его имени, оно неявно разворачивается, потому что предполагается, что оно содержит значение nil.

Последствия: если неявно развернутый отсутствуют, скорее всего, когда вы используете его в вашем коде исключение во время выполнения будет сгенерировано - например:

let s: String! = nil 
var s1: String = s // Execution was interrupted, reason: EXC_BAD_INSTRUCTION ... 

вопрос может превратиться в: почему неявно развернутые OPTIONALS существовать? Ответ заключается в том, что они необходимы для Resolving Strong Reference Cycles Between Class Instances и еще нескольких случаев.

Я бы лично избегал объявления неявно разворачиваемых переменных в моем коде, если у меня нет веской причины (например, для решения ссылочных циклов, как указано выше)

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