閱讀304 返回首頁    go 技術社區[雲棲]


Swift靜態方法

與靜態屬性類似,Swift中還定義了靜態方法,也稱為類型方法,所謂“類型”是指枚舉、結構體和類。靜態方法定義的方法也是與靜態屬性類似的,枚舉和結構體的靜態方法使用的關鍵字是static,類的靜態方法使用的關鍵字是class。
一、結構體中靜態方法
下麵我們先看一個結構體靜態方法的示例,代碼如下:
struct Account {
    
    var owner : String = "Tony"                 //賬戶名	①
    static var interestRate : Double = 0.668    //利率	②
    
    static func interestBy(amount : Double) -> Double {	③


        return interestRate * amount
    }
    
    func messageWith (amount : Double) -> String {	④
        
        var interest = Account.interestBy(amount)
        return "\(self.owner) 的利息是\(interest)"
        
    }
}


//調用靜態方法
println(Account.interestBy(10_000.00))	⑤


var myAccount = Account()	⑥
//調用實例方法
println(myAccount.messageWith (10_000.00))	⑦


上述代碼是定義Account結構體,第①行代碼聲明了實例屬性owner。第②行代碼聲明了靜態屬性interestRate。第③行代碼是定義靜態方法interestBy,靜態方法與靜態計算屬性類似,它不能訪問實例屬性或實例方法。
第④行是定義實例方法messageWith,實例方法能訪問實例屬性和方法,也能訪問靜態屬性和方法。在該方法中我們使用self.owner語句,其中self是一個隱藏屬性,指代當前類型實例,一般情況下我們不要使用它,除非屬性名與變量或常量名發生衝突。
提示 Swift的靜態方法中也能使用self,這在其他麵向對象的計算機語言中是不允許的。此時self表示當前數據類型,不代表枚舉、結構體或類的實例。
二、枚舉中靜態方法
下麵我們再看一個枚舉靜態方法的示例,代碼如下:
enum Account {
    
    case 中國銀行
    case 中國工商銀行
    case 中國建設銀行
    case 中國農業銀行
    
    static var interestRate : Double = 0.668 //利率	①
    
    static func interestBy(amount : Double) -> Double {	②
        return interestRate * amount
    }
}


//調用靜態方法
println(Account.interestBy(10_000.00 )) 	③


上述代碼是定義Account枚舉,第①行代碼聲明了靜態屬性interestRate。第②行代碼是定義靜態方法interestBy,靜態方法與靜態計算屬性類似,它不能訪問實例屬性或實例方法。第③行代碼是調用靜態方法。
從示例可以看出,結構體和枚舉的靜態方法使用定義沒有區別。
三、類中靜態方法
下麵我們再看一個類方法的示例,代碼如下:
class Account {
    
    var owner : String = "Tony"                 //賬戶名


    class func interestBy(amount : Double) -> Double {	①
        return 0.8886 * amount
    }
}


//調用靜態方法
println(Account.interestBy(10_000.00 ))	②


上述代碼是定義Account類,第①行代碼是使用關鍵字class定義靜態方法interestBy,靜態方法與靜態計算屬性類似,它不能訪問實例屬性或實例方法。第②行代碼是調用靜態方法。


更多內容請關注國內第一本Swift圖書《Swift開發指南》
本書交流討論網站:https://www.51work6.com/swift.php
歡迎加入Swift技術討論群:362298485

歡迎關注智捷iOS課堂微信公共平台


最後更新:2017-04-03 05:40:09

  上一篇:go Android開發大牛博客
  下一篇:go Html 5 坦克大戰(韓順平版本)