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