swift 筆記 (十八) —— 擴充

來源:互聯網
上載者:User

擴充擴充可以讓我們給一個已有的類、結構體、枚舉等類型添加新功能,包括屬性和方法,甚至是構造器,下標,支援協議等等。。。
甚至是我們拿不到原始碼的類、結構體、枚舉,我們依然可以給它加擴充。。。
看到這裡的時候,我還有點小激動呢。。。可是淡定下來之後,覺得這TMD就是個大大的飛線,飛線,飛線。。。這讓我們的代碼難以理解全面(總要擔心是不是哪裡還有擴充,我沒讀到的。。誰會不會在哪寫個飛線出來以達到他不可告人的秘密,所以我們不得不在“代碼規範”裡寫:擴充必須緊挨著類的實現寫。可是拿不代碼的類呢?我們還要規定必須給檔案名稱起一個類似xxxxExtensions.swift 或者 xxxxDelegate.swift 這樣的名字。。。為何不讓使用者通過代理模式去做這樣的事情,反而是提供了這樣一個反代碼反人類的特性。。。)
不管怎麼說,既然提供了這樣的東西,還是記錄一下這個奇葩的方式吧。
文法:extension MyClass {     //要擴充的屬性,方法,等功能寫在這裡}
extension MyClass: MyProtocol {          //協議在後面的筆記裡再說,這裡只是提一下     //要擴充的屬性,方法,等功能寫在這裡}
擴充可以做的事兒:1. 添加計算型屬性和計算型靜態屬性2. 定義執行個體方法和類型方法3. 提供新的構造器4. 定義下標5. 定義和使用新的巢狀型別6. 使一個已有的類型遵守某個協議
之前在寫一個例子的時候,發現 Int沒有toString方法,於是,我們藉助擴充的強大功能,現在可以讓Int有toString方法了:
extension Int {
    func toString()->String {
        var tmpArray = ["0","1","2","3","4"
                       ,"5","6","7","8","9"]
        var tmpNum = self
        var tmpString = ""
        while tmpNum > 0 {
            tmpString = tmpArray[tmpNum % 10] + tmpString
            tmpNum /= 10
        }
        return tmpString
    }
}

var myNum:Int = 6234232
println(myNum.toString())

注意:這隻是個玩具(樣本),如果用到項目中的話,請考慮更好的寫法。至於文檔中提到的構造器,下標,mutating方法,巢狀型別,無非都是這樣。。再簡單不過,自己寫著玩就好了。不列了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.