1 定義一個類層次作為例子
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")
]
// 數(shù)組 library 的類型被推斷為 [MediaItem]
for v in library { // v 在此處是 MediaItem 類型
print(v.name)
}
2 檢查類型(Checking Type) is
var movieCount = 0
var songCount = 0
for item in library {
if (item is Movie) {
movieCount += 1
} else if (item is Song) {
songCount += 1
}
}
3 向下轉(zhuǎn)型(Downcasting) as?
as!
條件形式(conditional form) as? 返回一個你試圖向下轉(zhuǎn)成的類型的可選值(optional value)
強(qiáng)制形式 as! 把試圖向下轉(zhuǎn)型和強(qiáng)制解包(force-unwraps)轉(zhuǎn)換結(jié)果結(jié)合為一個操作诅岩。
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)")
}
}
4 Any和AnyObject的類型轉(zhuǎn)換
AnyObject可以表示任何類類型的實(shí)例
Any可以表示任何類型彭羹,包括函數(shù)類型
playground文件在andyRon/LearnSwift