Добро пожаловать в Stackoverflow. Давайте попробуем ответить на ваши вопросы один за другим.
В чем разница между этими двумя? a.b.b = 3
и print(a.b.b)
Если это то, что вы имеете в виду, первый вызывает ошибку на Playground,
выражение не удалось разобрать, неизвестная ошибка
тогда на самом деле нет никакой разницы. Но если вы хотите знать, почему это происходит, это должно быть проблемой Playground. Потому что это выражение не должно вызывать ошибку времени компиляции в Xcode (проекте).
Чтобы решить эту проблему в Playground, вам нужно разбить выражение, например:
let bOfA = a.b
bOfA.b = 3
Вуаля! Проблема решена!
Также эта проблема может быть как-то связана с ошибкой Xcode:
Компилятор не может проверить тип этого выражения за разумное время; попробуйте разбить выражение на отдельные подвыражения
Когда я должен использовать '!' явно и когда это не нужно?
Вы используете этот !
, если вы уверены, что ваш объект имеет значение. !
автоматически разворачивает объект, не проверяя, нулевой он или нет.
Когда не надо? Ну, насколько это возможно, вам не следует практиковать принудительное развертывание. Прочтите о вариантах безопасного развертывания для получения дополнительной информации. Есть много ресурсов об этом.
- Безопасная распаковка оптических строк и целых чисел
- https://learnappmaking.com/swift-Options-how-to/
- https://forums.developer.apple.com/thread/45469
person
Glenn Posadas
schedule
06.03.2020