小编And*_* H.的帖子

Swift:将Any转换为协议对象数组

有一个协议:

protocol Valuable {
    func value() -> Int
}
Run Code Online (Sandbox Code Playgroud)

和一个实现协议的类:

class Value: Valuable {
    private let v: Int

    init(value: Int) {
        v = value
    }

    func value() -> Int {
        return v
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个Value对象数组存储在Any类型的变量中:

let any: Any = [Value(value: 1), Value(value: 2), Value(value: 3)]
Run Code Online (Sandbox Code Playgroud)

可以将Any转换为[Value]:

let arrayOfValue = any as? [Value] // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

为什么不能将[任何]归咎于[有价值]?

let arrayOfValuable = any as! [Valuable] // compiler error BAD INSTRUCTION
let arrayOfValuable2 = any as? [Valuable] // nil
Run Code Online (Sandbox Code Playgroud)

casting protocols swift

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

casting ×1

protocols ×1

swift ×1