I’d been wondering why, when creating some types in Swift I was seeing a requirement to unwrap the type. After all, surely if I created a types it’s not nil and hence why does it need to be optional?
Well Swift does actually allow us to declare a type’s init as optional, for example
struct Email {
var address: String
init?(address: String) {
// not really much of a validation step
// but in the real world we could ensure
// the address matches an email regex
guard address.count > 0 else {
return nil
}
}
}
This is pretty useful as it means if we initialize a type with invalid values, we can simple return a nil optional object instead of the alternative of throwing an exception or the need for a two phase initialization.