Comment fonctionne la covariance pour Optional
dans Swift ?
Disons que j'écris le code suivant :
var nativeOptionalView: Optional<UIView>
let button = UIButton()
nativeOptionalView = .Some(button)
var nativeOptionalButton = Optional.Some(button)
nativeOptionalView = nativeOptionalButton
Il compile et fonctionne très bien. Cependant, si je définis MyOptional
comme
enum MyOptional<T> {
case Some(T)
case None
}
Et écrivez ce qui suit :
var myOptionalView: MyOptional<UIView>
let button = UIButton()
myOptionalView = .Some(button)
var myOptionalButton = MyOptional.Some(button)
myOptionalView = myOptionalButton
Je reçois l'erreur :
error : cannot assign value of type '
MyOptional<UIButton>
' pour taper 'MyOptional<UIView>
'
Je comprends pourquoi cette erreur se produit avec MyOptional
Ce que je ne comprends pas, c'est pourquoi cela ne se produit pas avec Optional
.