亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Swift中動態(tài)調用實例方法介紹

 更新時間:2015年01月09日 13:55:02   投稿:junjie  
這篇文章主要介紹了Swift中動態(tài)調用實例方法介紹,在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 將取到的是類型方法,如果我們想要取實例方法的話,可以顯式地加上類型聲明加以區(qū)別。這種方式不僅在這里有效,在其他大多數名字有歧義的情況下,都能很好地解決問題:
復制代碼 代碼如下:

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

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

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

相關文章

  • 在Swift中使用Objective-C編寫類、繼承Objective-C類

    在Swift中使用Objective-C編寫類、繼承Objective-C類

    這篇文章主要介紹了在Swift中使用Objective-C編寫類、繼承Objective-C類等操作方法介紹,需要的朋友可以參考下
    2014-07-07
  • 深入解析Swift中switch語句對case的數據類型匹配的支持

    深入解析Swift中switch語句對case的數據類型匹配的支持

    這篇文章主要介紹了Swift中switch語句對case的數據類型匹配的支持,Swift中switch...case語句支持多種數據類型的匹配判斷,十分強大,需要的朋友可以參考下
    2016-04-04
  • Swift?enum枚舉類型使用詳解

    Swift?enum枚舉類型使用詳解

    這篇文章主要為大家介紹了Swift?enum枚舉類型的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Swift中重寫和重載的使用與對比總結

    Swift中重寫和重載的使用與對比總結

    這篇文章主要給大家介紹了關于Swift中重寫和重載的使用方法,以及重寫和重載的對比分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • swift閉包和OC block類型的使用

    swift閉包和OC block類型的使用

    這篇文章主要介紹了swift閉包和OC block類型的使用,需要的朋友可以參考下
    2017-08-08
  • Swift?Error的處理方法說明

    Swift?Error的處理方法說明

    wift?是一個類型嚴格的語言,在很多情況下各種不匹配或者強制解包出錯都會導致系統(tǒng)崩潰。所以我們需要進行異常處理,在swift中也叫錯誤處理Error
    2022-08-08
  • Swift項目中利用SWRevealViewController實現側滑菜單

    Swift項目中利用SWRevealViewController實現側滑菜單

    這篇文章主要介紹了Swift項目中利用SWRevealViewController實現側滑菜單,需要的朋友可以參考下
    2015-12-12
  • SwiftUI智能家居開關燈頁面搭建示例

    SwiftUI智能家居開關燈頁面搭建示例

    這篇文章主要為大家介紹了SwiftUI智能家居開關燈頁面搭建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Swift中循環(huán)語句中的轉移語句 break 和 continue

    Swift中循環(huán)語句中的轉移語句 break 和 continue

    這篇文章主要介紹了Swift中循環(huán)語句中的轉移語句 break 和 continue,本文通過實例代碼給大家介紹的非常詳細,需要的的朋友參考下
    2016-12-12
  • Swift實現3D輪播圖效果

    Swift實現3D輪播圖效果

    這篇文章主要為大家詳細介紹了Swift實現3D輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論