swift類型轉換

//定義一個基類
class MediaItem {
    var name : String?
    init(name : String)  {
        self.name = name
    }
}
//定義Movie繼承MediaItem
class Movie: MediaItem {
    var director : String?
    init(name : String, director : String) {
        self.director = director
        super.init(name : name)
    }
}
//定義Song繼承MediaItem
class Song: MediaItem {
    var artist : String?
    init(name : String, artist : String) {
        self.artist = artist
        super.init(name : name)
    }
}

// 創(chuàng)建了一個數組常量 library,包含兩個 Movie 實例和三個 Song 實例。library 的類型是在它被初始化時根據它數組中所包含的內容推斷來的。Swift 的類型檢測器能夠推斷出 Movie 和 Song 有共同的父類 MediaItem,所以它推斷出 [MediaItem] 類作為 library 的類型:
let library = [Movie(name:"喜劇之王",director:"周星馳"),
            Movie(name:"唐人街探案",director:"陳思誠"),
            Movie(name:"戰(zhàn)狼2",director:"吳京"),
            Song(name:"給你們",artist:"張宇"),
            Song(name:"大海",artist:"張雨生"),
            Song(name:"動物世界",artist:"薛之謙")]

//用類型檢查操作符(is)來檢查一個實例是否屬于特定子類型
for item in library {
    
    if item is Movie {
        print("\(item.name!)是一部電影")
    }else if item is Song {
        print("\(item.name!)是一首歌曲")
    }
}

//當你不確定向下轉型可以成功時,用類型轉換的條件形式(as?),只有你可以確定向下轉型一定會成功時,才使用強制形式(as!)
for item in library {
    if let movie = item as? Movie {
        print("\(movie.name!)的導演是\(movie.director!)")
    }else if let song = item as? Song {
        print("\(song.name!)的歌唱者是\(song.artist!)")
    }
}


var chengDu = Song(name:"成都",artist:"趙雷")
//強制轉換(確定Song是MediaItem的父類)
let oneSong = chengDu as! MediaItem
print(oneSong.name!)

/*
Any 和 AnyObject 的類型轉換
Swift 為不確定類型提供了兩種特殊的類型別名:

Any 可以表示任何類型,包括函數類型。
AnyObject 可以表示任何類類型的實例。
只有當你確實需要它們的行為和功能時才使用 Any 和 AnyObject。在你的代碼里使用你期望的明確類型總是更好的。
 */

var array = [Any]()
array = [12,32,123,"1231"]

for item in array {
    if item is String {
        print(item)
    }
}

總結:類型判斷是is,類型轉換是as(不確定能否成功用as?,確定用as!)

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 類型轉換是一種檢查實例類型的方法,或者將該實例視為來自其自身類層次結構中的其他地方的不同超類或子類。Swift中的...
    Joker_King閱讀 2,634評論 0 0
  • Swift 語言類型轉換可以判斷實例的類型。也可以用于檢測實例類型是否屬于其父類或者子類的實例。 Swift 中類...
    零度_不結冰閱讀 334評論 0 0
  • 類型轉換可以判斷實例的類型,也可以將實例看做是其父類或子類的實例。?在swift中類型轉換使用is和as操作符實現...
    EndEvent閱讀 468評論 2 3
  • 寫在前面 類型轉換在很多編程語言中都會用到,比如在Objective-C中(如果你恰好用它??),你肯定經常寫下面這...
    KFAaron閱讀 10,366評論 6 7
  • 1.以下面代碼為情境代碼 2.is 用來判斷對象是否屬于某個類或者其子類,相當于OC中的isKindOf方法 3....
    修行猿閱讀 491評論 0 0

友情鏈接更多精彩內容