iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0

https://ithelp.ithome.com.tw/upload/images/20181103/20110801BjSugxepcU.png

Swift 是一種強行別語言,意思是 Swift 的編譯器必須明確的知道我們程式碼中所使用的形態。

不過,相對來說也損失了一些彈性,假設我們現在想要寫一個叫做「Flower」的類別,要寫一堆程式碼處理字串、另外一堆程式碼處理日期、另外一堆處理整數...,實在很煩人。

所以,我們這時候就要使用**泛型(generic)**了,他讓我們寫程式時不用精確的指定要處理的資訊是什麼。拿 Array 打個比方:Array 不關心它儲存的東西是什麼形態,只關心要把東西照順序放好,陣列(Array)就是一個泛型。

要建立一個泛型的型別,我們一樣將我們的類別取好名字後,在類別名稱後面加上 < >,裡面寫一種形態,通常裡面那個形態會寫「T」不過其實可以放入任何想放入的文字:若想要建立一個 Flower 泛型物件,內容包括一個值與任意個子 Flower 物件,可以這樣寫:

class Flower<F> {
    //在類別內,現在 " F " 會被當成一種類型
    
    //" value "是 F 形態的變數
    var value: F
    
    //" children "是一個裝載 Flower 物件的陣列
    //該陣列的形態和本物件是相同的
    private (set) var children: [Flower<F>]  = []
    
    //我們支援用 F 形態的一個值初始化這個物件
    init(value: F){
        self.value = value
    }
    
    //也可以加入一個子節點到我們的子3清單中
    func addChild(value: F) -> Flower<F> {
        let newChild = Flower<F>(value: value)
        children.append(newChild)
        return newChild
    }
}
 

建立好泛型之後,我們就可以搭配不同形態使用了。舉例來說,剛剛建立的 Flower 泛型,就可以建立一個指定接受 Int 變數,再建立另一個指定接受 String 變數:

//Flower搭配整數使用
let integerFlower = Flower<Int>(value: 5)

//可加入內含整數的字項
integerFlower.addChild(value: 10)
integerFlower.addChild(value: 5)

//搭配字串使用
let stringFlower = Flower<String>(value: "Hello")

stringFlower.addChild(value: "Yes")
stringFlower.addChild(value: "Internets")


    
    
    

上一篇
Swift 4.2 Day-18 initializer & deinitializer
下一篇
Swift 4.2 Day-20 MVC 設計模式
系列文
菜比八iOS程式開發30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言