Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to cast Any to an Optional?

Let's say I have a piece of code like this:

let x: Int? = 10  
let y: Any = x

Now I want to cast y to Int?:

let z = y as Int? // Error: Cannot downcast from 'Any' to a more optional type 'Int?'

Is this just not possible or is there another way?

like image 428
Nikita Kukushkin Avatar asked Mar 15 '15 12:03

Nikita Kukushkin


1 Answers

For Swift 2.0, you can use the following:

let x: Int? = 10
let y: Any = x
let z = Mirror(reflecting: y).descendant("Some") as? Int

Or as a function:

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)

Or you can do this if you don't like Reflection:

func castToOptional<T>(x: Any) -> T {
    return x as! T
}
let x: Int? = 10
let y: Any = x
let z: Int? = castToOptional(y)
like image 171
Sandy Chapman Avatar answered Nov 09 '22 23:11

Sandy Chapman