Я создал библиотеку предопределенных цветов для использования в Swift и Objective-C, и я переписал подключаемый модуль для Xcode, который просматривает цвет в редакторе, чтобы он работал с моей библиотекой (наряду с несколькими другими изменениями).Динамический вызов метода в Swift
В настоящее время плагин имеет список созданных цветов. Я не в восторге от этого решения, потому что это означает, что в любое время, когда я меняю список цветов, мне тоже нужно изменить свой код. Кроме того, мне не нравится, когда структура данных висит вокруг около 1500 цветов и строк. Кажется, это не так эффективно или элегантно.
Что я хотел бы сделать, а не хранить все цвета в памяти, это вызвать правильную функцию NSColor, когда она встречает имя функции в коде. Я обнаружил, что могу проверить, отвечает ли NSColor на селектор с функцией responsesToSelector: но вызов функции 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), чтобы выполнить то, что вы хотите. (Это делает этот вопрос дубликатом [Alternative to performSelector in 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
У вас может быть массив методов, но, честно говоря, t держат 1500 цветов. – Schemetrical