Как ковариация работает для Optional
в Swift?
Скажем, я пишу следующий код:
var nativeOptionalView: Optional<UIView>
let button = UIButton()
nativeOptionalView = .Some(button)
var nativeOptionalButton = Optional.Some(button)
nativeOptionalView = nativeOptionalButton
Он компилируется и работает отлично. Однако, если я определяю MyOptional
как
enum MyOptional<T> {
case Some(T)
case None
}
И напишите следующее:
var myOptionalView: MyOptional<UIView>
let button = UIButton()
myOptionalView = .Some(button)
var myOptionalButton = MyOptional.Some(button)
myOptionalView = myOptionalButton
Я получаю сообщение об ошибке:
error: не может назначить значение типа '
MyOptional<UIButton>
' для ввода 'MyOptional<UIView>
'
Я понимаю, почему эти ошибки происходят с MyOptional
, я не понимаю, почему это не происходит с Optional
.