Вопрос по swift – В чем разница между «?» И «!» В Swift?

17

Я знаю что "?" а также "!" значит, когда я объявляю переменные в Swift. Но что они имеют в виду, когдас помощью эти переменные? Например, в этом коде:

var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...

В чем разница междуattachment.image!.size а такжеattachment.image?.size?

Ваш Ответ

3   ответа
1

Когда вы используете! и переменнаяnil это вызовет ошибку времени выполнения, но если использовать? это не удастся изящно. Более подробная информация вяблочный документ

24

что такое ! а также ?:

Использовать? если значение может стать нулевым в будущем, так что вы проверяете это.Используйте! если это действительно не должно стать нулевым в будущем, но это должно быть нулевым первоначально.

если вы используетеattachment.image!.size любая переменная с! означает, что компилятор не беспокоиться о том, что переменная имеет какое-либо значение илиnil, он будет предпринимать дальнейшие действия, он будет пытаться получить размер изображения. еслиattachment.image являетсяnil тогда приложение будет сбой здесь.

В то время как,attachment.image?.size, это убедит вас, еслиattachment.image не ноль, тогда будут предприняты дальнейшие действия, в противном случае, но это подтвердит, что приложение не будет аварийно завершено в случаеnil ценностьimage .

Резюме:

Мы должны использовать!, Когда мы убедимся, что переменная типа option имеет значение за раз, и нам нужно предпринять дальнейшие действия, иначе.

41

использованиеattachment.image!.size если вам гарантировано, чтоimage? неnil, Если вы не правы (и этоnil) ваше приложение будет зависать. Это называетсяпринудительная распаковка.

Если выТочно сказать не могу это не будетnilиспользоватьimage?.

В твоем случаеimage! все в порядке, так как вы контролируете лиplaceholder.png существует.

Прочитайте всю документацию наSwift Дополнительно, Это основная и фундаментальная часть языка.

Похожие вопросы