程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift中靜態挪用實例辦法引見

Swift中靜態挪用實例辦法引見

編輯:更多關於編程

Swift中靜態挪用實例辦法引見。本站提示廣大學習愛好者:(Swift中靜態挪用實例辦法引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift中靜態挪用實例辦法引見正文


在 Swift 中有一類很成心思的寫法,可讓我們不直接應用實例來挪用這個實例上的辦法,而是經由過程類型掏出這個類型的某個實例辦法的簽名,然後再經由過程傳遞實例來拿到現實須要挪用的辦法。好比我們有如許的界說:

class MyClass {
    func method(number: Int) -> Int {
        return number + 1
    }
}

想要挪用 method 辦法的話,最通俗的應用方法是生成MyClass的實例,然後用.method來挪用它:

let object = MyClass()
let result = object.method(1)

// result = 2

這就限制了我們只可以或許在編譯的時刻就決議object實例和對應的辦法挪用。其實我們還可使用適才說到的辦法,將下面的例子改寫為:

let f = MyClass.method
let object = MyClass()
let result = f(object)(1)

這類語法看起來會比擬奇異,然則現實上其實不龐雜。Swift中可以直接用 Type.instanceMethod的語法來生成一個可以柯裡化的辦法。假如我們不雅察 f 的類型 (Alt + 單擊),可以曉得它是:

f: MyClass -> (Int) -> Int

其實關於 Type.instanceMethod 如許的取值語句,現實上適才

let f = MyClass.method

做的工作是相似於上面如許的字面量轉換:

let f = { (obj: MyClass) in obj.method }

這下就不難懂得為何下面的挪用辦法可以成立了。

這類辦法只實用於實例辦法,關於屬性的 getter或許setter 是不克不及用相似的寫法的。別的,假如我們碰到有類型辦法的名字抵觸時:

class MyClass {
    func method(number: Int) -> Int {
        return number + 1
    }

    class func method(number: Int) -> Int {
        return number
    }
}

假如不加修改,MyClass.method 將取到的是類型辦法,假如我們想要取實例辦法的話,可以顯式地加上類型聲明加以差別。這類方法不只在這裡有用,在其他年夜多半名字有歧義的情形下,都能很好地處理成績:

let f1 = MyClass.method
// class func method 的版本

let f2: Int -> Int = MyClass.method
// 和 f1 雷同

let f3: MyClass -> Int -> Int = MyClass.method
// func method 的柯裡化版本

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved