В Swift я могу объявить константу типа Any
и поместить в нее String
.
let any: Any = "hello world"
Хорошо. С другой стороны, я не могу поместить значение nil
в any
потому что это не обязательно.
let any: Any = nil
error: nil cannot initialize specified type 'Any' (aka 'protocol<>')
let any: Any = nil
^
Отлично. Но почему компилятор позволяет мне писать следующий код?
let couldBeNil: String? = nil
let any: Any = couldBeNil
print(any) // nil
Разве Any
не следует правилу Swift, что только Optional var/let могут быть заполнены nil
?
Протестировано с Xcode Playground 7.2 + Swift 2.1.1