使用Playground快速練習Swift語法--擴展與協議

擴展(Extensions)

Swift中的擴展功能能夠動態給類增長功能,相似於Javascript中的prototype
這在Swift這樣的非腳本語言中居然也有這樣的功能,真是很逆天啊。html

擴展語法

extension SomeType {
    //加入新功能
}

擴展例子

  • 單位轉換
extension Double {
    var km: Double { return self * 1000.0 }
}
print("25.4公里 =  \( 25.4.km)米")
  • 數字轉中文
func getChineseNumber(number: Int) -> String {
    let ch = "零一二三四五六七八九"
    let index = advance(ch.startIndex, number)
    return String(ch[index])
}

extension Int {
    func toChineseNumber() -> String {
        var result = ""
        var num  = self
        repeat {
            result = getChineseNumber(num % 10) + result
            num = num / 10
        }
        while num > 0
        return result
    }
}

1234567890.toChineseNumber()

協議(Protocol)

Swift中的協議相似於Java中的接口(Interface),但Swift中的協議更強大,協議中不只能夠定義方法,
也能夠定義屬性;協議不只能夠做用於類,還能夠在結構體和枚舉中使用。ios

協議語法

protocol SomeProtocol {
    // 協議內容
}

class SomeClass: SomeSuperClass, SomeProtocol {
    // 類的內容
}

協議例子

protocol FullyNamed {
    var fullName: String { get }
    func greeting() -> String
}

class Person: FullyNamed{
    var fullName: String = ""
    init(fullName:String){
        self.fullName = fullName
    }
    
    func greeting() -> String {
        return "hello " + fullName;
    }
}

let zhansan = Person(fullName: "張三")
print(zhansan.greeting())

參考資料

The Swift Programming Language 中文版
The Swift Programming Language 2.0 官方教程git

本文做者: 陽春麪
原文地址:http://www.aswifter.com/2015/07/23/learn-swift-with-playground-extensi...swift

歡迎關注個人微信公衆號,分享Android 開發,IOS開發,Swift開發和互聯網內容
微信號:APP開發者
微信

相關文章
相關標籤/搜索