Swift中動態呼叫例項方法介紹

2022-09-21 09:00:10 字數 1428 閱讀 8601

在 swift 中有一類很有意思的寫法,可以讓我們不直接使用例項來呼叫這個例項上的方法,而是通zgorityqbm過型別取出這個型別的某個例項方法的簽名,然後再通過傳遞例項來拿到實際需要呼叫的方法。比如我們有這樣的定義:

複製** **如下:

class myclass

}想要呼叫 method 方法的話,最普通的使用方式是生成myclass的例項,然後用.method來呼叫它:

複製** **如下:

let object = myclass()

let result = object.method(1)

// result = 2

這就限定了我們只能夠在編譯的時候就決定object例項和對應的方法呼叫。其實我們還可以使用剛才說到的方法,將上面的例子改寫為:

複製** **如下:

let f = myclasswww.cppcns.com.method

let object = myclass()

let result = f(object)(1)

這種語法看起來會比較奇怪,但是實際上並不複雜。swift中可以直接用 type.instancemethod的語法來生成乙個可以柯里化的方法。如果我們觀察 f 的型別 (alt + 單擊),可以知道它是:

複製** **如下:

f: myclass -> (int) -> int

其實對於 type.izgorityqbmnstancemethod 這樣的取值語句,實際上剛才

複製** **如下:

let f = myclass.method

做的事情是類似於下面這樣的字面量轉換:

複製** **如下:

let f =

這下就不難理解為什麼上面的呼叫方法可以成立了。

這種方法只適用於例項方法,對於屬性的 getter或者setter 是不能用類似的寫法的。另外,如果我們遇到有型別方法的名字衝突時:

複製** **如下:

class myclass

class func method(number: int) -> zgorityqbmint

}如果不加改動,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 的柯里化版本

本文標題: swift中動態呼叫例項方法介紹

本文位址:

Swift 例項方法

例項方法 1 例項方法 print 1 例項方法 class mypoint func showpoint func setpoint x double,y double 預設第一引數作為內部引數,第二個及以後既作為內部有作為外部引數 setpoint x 10.0,10.0 var p0 mypo...

動態呼叫例項

下面通過具體的程式示例,以便更好地說明動態呼叫的特點及用法。首先,假設在動態呼叫中,某一主程式 如下。identificationdivision.program iddynamic main.auther environmentdivision.datadivision.working stora...

Jquery chosen動態設定值例項介紹

一款選擇外掛程式,支援檢索,多選,但不支援輸入效果如下圖 確定是用的這個哦,不然可往下看也沒有什麼意義了 突然發現如果用在省市選擇發現有如下問題 1,不能動態設定值 2,不能動態設定選中 看了好幾遍api愣是公尺有發現有方法可以直接呼叫。沒辦法就看原始碼,發現在其初始化的時候有乙個判斷如下圖 發現有...