跳转至

类型转换

类型转换

is 操作符

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)
    }
}
// library类型为MediaItem
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")
]

var movieCount = 0

var songCount = 0

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

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

1
2
3
4
5
6
7
for item in library {
    if let movie = item as? Movie {
        println("Movie: '\(movie.name)', dir. \(movie.director)")
    } else if let song = item as? Song {
        println("Song: '\(song.name)', by \(song.artist)")
    }
}

评论