可以将Any转换为Optional吗?

Nik*_*kin 7 casting optional swift

假设我有一段这样的代码:

let x: Int? = 10  
let y: Any = x
Run Code Online (Sandbox Code Playgroud)

现在我想把y转换成Int?:

let z = y as Int? // Error: Cannot downcast from 'Any' to a more optional type 'Int?'
Run Code Online (Sandbox Code Playgroud)

这是不可能还是有另一种方式?

San*_*man 8

对于Swift 2.0,您可以使用以下内容:

let x: Int? = 10
let y: Any = x
let z = Mirror(reflecting: y).descendant("Some") as? Int
Run Code Online (Sandbox Code Playgroud)

或者作为一个功能:

func castToOptional<T>(x: Any) -> T? {
    return Mirror(reflecting: x).descendant("Some") as? T
}
let x: Int? = 10
let y: Any = x
let z: Int? = castToOptional(y)
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做,如果你不喜欢反射:

func castToOptional<T>(x: Any) -> T {
    return x as! T
}
let x: Int? = 10
let y: Any = x
let z: Int? = castToOptional(y)
Run Code Online (Sandbox Code Playgroud)