Por que precisamos de Opcionais Implicitamente Desembrulhados (Implicitly Unwrapped Optionals) se já temos certeza de que há um valor?
Olá a todos! Acabei de começar a estudar Swift e estou com uma dúvida. Li a documentação e me deparei com algo chamado Implicitly Unwrapped Optionals (IUO) — opcionais implicitamente desembrulhados. Eles são declarados com um ponto de exclamação, por exemplo:
```swift
var name: String! = "Alice"
```
Entendo que isso é um opcional que é automaticamente desembrulhado ao ser acessado, sem a necessidade de escrever `if let` ou `guard let`. Mas o que não entendo é: por que esse tipo existe? Afinal, se temos certeza de que o valor existe (é isso que o ponto de exclamação sugere), por que não usar simplesmente um tipo não opcional comum, como `String`? Qual é a diferença?
Ouvi dizer que IUOs são frequentemente usados em propriedades do UIKit, especialmente em storyboards, por exemplo:
```swift
@IBOutlet weak var button: UIButton!
```
Por que não podemos simplesmente escrever `UIButton`? Afinal, o botão certamente existirá se o conectamos. Ou isso é algum tipo de mágica relacionada ao ciclo de vida da view? Expliquem, por favor.