我已經創建了一個用於Swift和Objective-C的預定義顏色庫,並且我已經爲Xcode重寫了一個插件,該插件在編輯器中預覽顏色以便它可以工作與我的圖書館(以及一些其他更改)。在Swift中動態調用方法
插件當前有一個創建的顏色列表。我對這個解決方案並不感到興奮,因爲它意味着我每次更改顏色列表時都必須在這裏修改我的代碼。另外我不喜歡有一個數據結構掛在約1500種顏色和字符串。似乎並不那麼高效或優雅。
我想要做的不是將所有顏色存儲在內存中,而是在代碼中遇到函數名稱時調用NSColor的正確函數。我發現我可以檢查NSColor是否響應具有函數respondsToSelector的選擇器:但調用performSelector:不符合我的需要,因爲我需要來自該調用的返回值。
那麼有沒有辦法從這個。
let colourDict [ String : NSColor ] = [
"blackColor" : NSColor.blackColor(),
"whiteColor" : NSColor.whiteColor() ]
...
let foundColour = colourDict[ colourMethodName ]
就像這樣。
if (NColor.respondsToSelector (Selector (colourMethodName)) {
foundColour = NSColor.performSelector (Selector (colourMethodName))
}
顯然,這不會是performSelector:功能本身,而是我在尋找不同的是它會返回回NSColor對象類型的功能。
謝謝。
我想你應該能[分配功能給一個變量,並調用它,當你需要回報值](http://stackoverflow.com/a/24521823/1445366)來完成你想要的。 (這使得這個問題的重複[在Swift中執行選擇器?](http://stackoverflow.com/questions/24158427/alternative-to-performselector-in-swift)) –
這聽起來像你想重複['NSColorList']的功能(https://developer.apple。com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSColorList_Class/index.html#// apple_ref/occ/cl/NSColorList)class ... – rickster
您可以擁有一組方法,但實際上您不應該'不要拿着1500種顏色。 – Schemetrical