Подтвердить что ты не робот

В чем разница между "?" а также "!" в Свифт?

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

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

Какая разница между attachment.image!.size и attachment.image?.size?

4b9b3361

Ответ 1

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

Если вы не уверены, что это не будет nil, используйте image?.

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

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

Ответ 2

что есть! и?:

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

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

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

Резюме:

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

Ответ 3

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

Ответ 4

Оба символа! а также? используется для опций. Мы должны использовать!, Когда мы убедимся, что переменная типа параметра имеет значение за раз, и нам нужно принять меры к нему. В противном случае произойдет сбой, если значение переменной равно nil. И если вы используете?, Приложение не будет аварийно завершено в без дела.

Вы можете перейти по этой ссылке для получения дополнительной информации: - https://www.youtube.com/watch?v=twBfiKsbHP8