最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹

 更新時(shí)間:2015年01月09日 13:55:02   投稿:junjie  
這篇文章主要介紹了Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹,在Swift中有一類(lèi)很有意思的寫(xiě)法,可以讓我們不直接使用實(shí)例來(lái)調(diào)用這個(gè)實(shí)例上的方法,而是通過(guò)類(lèi)型取出這個(gè)類(lèi)型的某個(gè)實(shí)例方法的簽名,然后再通過(guò)傳遞實(shí)例來(lái)拿到實(shí)際需要調(diào)用的方法,需要的朋友可以參考下

在 Swift 中有一類(lèi)很有意思的寫(xiě)法,可以讓我們不直接使用實(shí)例來(lái)調(diào)用這個(gè)實(shí)例上的方法,而是通過(guò)類(lèi)型取出這個(gè)類(lèi)型的某個(gè)實(shí)例方法的簽名,然后再通過(guò)傳遞實(shí)例來(lái)拿到實(shí)際需要調(diào)用的方法。比如我們有這樣的定義:

復(fù)制代碼 代碼如下:

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

想要調(diào)用 method 方法的話,最普通的使用方式是生成MyClass的實(shí)例,然后用.method來(lái)調(diào)用它:
復(fù)制代碼 代碼如下:

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

// result = 2


這就限定了我們只能夠在編譯的時(shí)候就決定object實(shí)例和對(duì)應(yīng)的方法調(diào)用。其實(shí)我們還可以使用剛才說(shuō)到的方法,將上面的例子改寫(xiě)為:
復(fù)制代碼 代碼如下:

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

這種語(yǔ)法看起來(lái)會(huì)比較奇怪,但是實(shí)際上并不復(fù)雜。Swift中可以直接用 Type.instanceMethod的語(yǔ)法來(lái)生成一個(gè)可以柯里化的方法。如果我們觀察 f 的類(lèi)型 (Alt + 單擊),可以知道它是:
復(fù)制代碼 代碼如下:

f: MyClass -> (Int) -> Int

其實(shí)對(duì)于 Type.instanceMethod 這樣的取值語(yǔ)句,實(shí)際上剛才
復(fù)制代碼 代碼如下:

let f = MyClass.method

做的事情是類(lèi)似于下面這樣的字面量轉(zhuǎn)換:
復(fù)制代碼 代碼如下:

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

這下就不難理解為什么上面的調(diào)用方法可以成立了。

這種方法只適用于實(shí)例方法,對(duì)于屬性的 getter或者setter 是不能用類(lèi)似的寫(xiě)法的。另外,如果我們遇到有類(lèi)型方法的名字沖突時(shí):

復(fù)制代碼 代碼如下:

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

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


如果不加改動(dòng),MyClass.method 將取到的是類(lèi)型方法,如果我們想要取實(shí)例方法的話,可以顯式地加上類(lèi)型聲明加以區(qū)別。這種方式不僅在這里有效,在其他大多數(shù)名字有歧義的情況下,都能很好地解決問(wèn)題:
復(fù)制代碼 代碼如下:

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

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

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

相關(guān)文章

  • Swift運(yùn)算符使用方法淺析

    Swift運(yùn)算符使用方法淺析

    Swift 語(yǔ)言支持大部分標(biāo)準(zhǔn) C 語(yǔ)言的運(yùn)算符,并且改進(jìn)了許多特性來(lái)使我們的代碼更加規(guī)范,其中主要包含算數(shù)運(yùn)算符、區(qū)間運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符、自增自減運(yùn)算符、溢出運(yùn)算符等
    2022-09-09
  • Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift?enum枚舉類(lèi)型使用詳解

    Swift?enum枚舉類(lèi)型使用詳解

    這篇文章主要為大家介紹了Swift?enum枚舉類(lèi)型的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Swift如何使用類(lèi)型擦除及自定義詳解

    Swift如何使用類(lèi)型擦除及自定義詳解

    有很多地方會(huì)用到類(lèi)型擦除,并且它們的作用的各不相同。下面這篇文章主要給大家介紹了關(guān)于Swift如何使用類(lèi)型擦除及自定義的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • Swift利用CoreData實(shí)現(xiàn)一個(gè)通訊錄存儲(chǔ)詳解

    Swift利用CoreData實(shí)現(xiàn)一個(gè)通訊錄存儲(chǔ)詳解

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData實(shí)現(xiàn)一個(gè)通訊錄存儲(chǔ)的相關(guān)資料,本文是大家學(xué)習(xí)coreDate的基礎(chǔ)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift代碼自定義UIView實(shí)現(xiàn)示例

    Swift代碼自定義UIView實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Swift如何自定義UIView的實(shí)現(xiàn)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2021-10-10
  • Swift中閉包實(shí)戰(zhàn)案例詳解

    Swift中閉包實(shí)戰(zhàn)案例詳解

    接觸過(guò)Swift的小伙伴對(duì)“閉包”應(yīng)該不陌生,相當(dāng)于OC中的Block,是Swift語(yǔ)法中比較難理解的一塊。下面這篇文章主要介紹了關(guān)于Swift中閉包實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • swift中的@UIApplicationMain示例詳解

    swift中的@UIApplicationMain示例詳解

    這篇文章主要給大家介紹了關(guān)于swift中@UIApplicationMain的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift可選值優(yōu)化示例詳解

    Swift可選值優(yōu)化示例詳解

    這篇文章主要為大家介紹了Swift可選值優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 在?Swift?中編寫(xiě)Git?Hooks腳本的方法

    在?Swift?中編寫(xiě)Git?Hooks腳本的方法

    在本例中,我使用了?commit-msg?鉤子,它能夠在當(dāng)前提交信息生效前修改此信息,鉤子由一個(gè)參數(shù)調(diào)用,該參數(shù)是指向包含用戶(hù)輸入的提交消息的文件的路徑,這意味著,為了改變提交消息,我們只需要從文件中讀取、修改其內(nèi)容,然后寫(xiě)回調(diào)用掛鉤的文件
    2022-06-06

最新評(píng)論

报价| 富顺县| 九台市| 泉州市| 临城县| 常宁市| 永登县| 武陟县| 阳东县| 兴业县| 马山县| 蒙自县| 元氏县| 盐城市| 双辽市| 东港市| 东光县| 富蕴县| 教育| 阆中市| 浠水县| 锦州市| 革吉县| 嘉禾县| 吉林市| 渝中区| 清苑县| 昌乐县| 大连市| 岑溪市| 金塔县| 湘潭县| 禄丰县| 全椒县| 冷水江市| 五原县| 平南县| 青龙| 邵阳市| 武冈市| 甘肃省|