The point of using an optional is to signal that the value may be nil
and to provide graceful ways of dealing with it if it is
nil
. While implicitly unwrapped optionals still provide means of dealing with nil
values, they also signal that the value
won’t be nil
, and unwrap it automatically. In addition to sending a decidedly mixed signal, this could lead to runtime errors if the
value ever is nil
.
It is safest, and clearest to use either an optional or a plain type and avoid the boggy middle ground of implicitly unwrapped optionals.
Noncompliant code example
var greeting : String! // Noncompliant
println(greeting) // At this point the value is nil. Runtime error results
Compliant solution
var greeting : String?
if let howdy = greeting {
println(howdy)
}