假设我们定义了一组选项:
var arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
Run Code Online (Sandbox Code Playgroud)
我可以用一小段时间强行打开它: var arrayForCrash = arrayOfOptionals.map { $0! }
但这会让应用程序崩溃,还有其他任何简短的方法(没有明确展开)我如何解开一个可选数组?
有一个协议:
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)