Существует протокол:
protocol Valuable {
func value() -> Int
}
и класс, который реализует протокол:
class Value: Valuable {
private let v: Int
init(value: Int) {
v = value
}
func value() -> Int {
return v
}
}
Существует массив объектов Value, хранящихся в переменной Any type:
let any: Any = [Value(value: 1), Value(value: 2), Value(value: 3)]
Можно передать Any в значение [Value]:
let arrayOfValue = any as? [Value] // [1, 2, 3]
Почему это невозможно для случая Любое [Ценное]?
let arrayOfValuable = any as! [Valuable] // compiler error BAD INSTRUCTION
let arrayOfValuable2 = any as? [Valuable] // nil