0.Type casting in Swift is implemented with the is and as operators.
类型转换:
1. as、as?、as!
as 用于 upcasting 和 type casting to bridged type
as? and as! 用于 downcasting
class Media {  
    var name :String = ""
    init(name:String) {
        self.name = name
    }
}
class Song:Media {}
let s1 = Song(name :"Fireproof")  
let m1 = s1 as Media // upcasting  
// let m1: Media = s1
let s2 = m1 as? Song // downcasting  
// let s2 = m1 as! Song
let s = "jj" as NSString // type casting to bridged type
  2.Casting does not actually modify the instance or change its values.
3.Type Casting for Any and AnyObject
let dict = ["someKey": 2] as [String: Any]  
// let dict: [String: Any] = ["someKey": 2]
for (key, value) in dict {  
    if let d = value as? Double {
        print(d)
    } else if let i = value as? Int {
        print(i)
    }
    switch value {
    case let d as Double: // cast bind to a constant
        print(d)
    case let i as Int:
        print(i)
    default:
        print("not match")
    }
}