swift2 类型转换

class MediaItem {
    var name: String
    init(name: String) {
        self.name = name
    }
}
class Movie: MediaItem {
    var director: String
    init(name: String,director: String) {
        self.director = director
        super.init(name: name)
    }
}

class Song: MediaItem {
    var artist: String
    init(name: String,artist: String) {
        self.artist = artist
        super.init(name: name)
    }
}
let library = [
    Movie(name: "Casablanca",director: "Michael Curtiz"),Song(name: "Blue Suede Shoes",artist: "Elvis Presley"),Movie(name: "Citizen Kane",director: "Orson Welles"),Song(name: "The One And Only",artist: "Chesney Hawkes"),Song(name: "Never Gonna Give You Up",artist: "Rick Astley")
]
// the type of "library" is inferred to be [MediaItem]



检查类型


var movieCount = 0
var songCount = 0

for item in library {
    if item is Movie {
        ++movieCount
    } else if item is Song {
        ++songCount
    }
}

print("Media library contains \(movieCount) movies and \(songCount) songs")
// prints "Media library contains 2 movies and 3 songs"


向下转型


for item in library {
    if let movie = item as? Movie {
        print("Movie: '\(movie.name)',dir. \(movie.director)")
    } else if let song = item as? Song {
        print("Song: '\(song.name)',by \(song.artist)")
    }
}

// Movie: 'Casablanca',dir. Michael Curtiz
// Song: 'Blue Suede Shoes',by Elvis Presley
// Movie: 'Citizen Kane',dir. Orson Welles
// Song: 'The One And Only',by Chesney Hawkes
// Song: 'Never Gonna Give You Up',by Rick Astley


Any与AnyObject类型转换


let someObjects: [AnyObject] = [
    Movie(name: "2001: A Space Odyssey",director: "Stanley Kubrick"),Movie(name: "Moon",director: "Duncan Jones"),Movie(name: "Alien",director: "Ridley Scott")
]
for object in someObjects {
    let movie = object as! Movie
    print("Movie: '\(movie.name)',dir. \(movie.director)")
}
// Movie: '2001: A Space Odyssey',dir. Stanley Kubrick
// Movie: 'Moon',dir. Duncan Jones
// Movie: 'Alien',dir. Ridley Scott


for movie in someObjects as! [Movie] {
    print("Movie: '\(movie.name)',dir. Ridley Scott

var things = [Any]()

things.append(0)
things.append(0.0)
things.append(42)
things.append(3.14159)
things.append("hello")
things.append((3.0,5.0))
things.append(Movie(name: "Ghostbusters",director: "Ivan Reitman"))
things.append({ (name: String) -> String in "Hello,\(name)" })

for thing in things {
    switch thing {
    case 0 as Int:
        print("zero as an Int")
    case 0 as Double:
        print("zero as a Double")
    case let someInt as Int:
        print("an integer value of \(someInt)")
    case let someDouble as Double where someDouble > 0:
        print("a positive double value of \(someDouble)")
    case is Double:
        print("some other double value that I don't want to print")
    case let someString as String:
        print("a string value of \"\(someString)\"")
    case let (x,y) as (Double,Double):
        print("an (x,y) point at \(x),\(y)")
    case let movie as Movie:
        print("a movie called '\(movie.name)',dir. \(movie.director)")
    case let stringConverter as String -> String:
        print(stringConverter("Michael"))
    default:
        print("something else")
    }
}

// zero as an Int
// zero as a Double
// an integer value of 42
// a positive double value of 3.14159
// a string value of "hello"
// an (x,y) point at 3.0,5.0
// a movie called 'Ghostbusters',dir. Ivan Reitman
// Hello,Michael

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...