В моем приложении используются сотни подклассов класса рисования. (Эти подклассы автоматически генерируются из художественных файлов.)
В идеале я хотел бы загрузить имена некоторых подклассов, проверить, действительно ли эти подклассы доступны, и если да, то создать их экземпляры.
Однако, казалось бы, отсутствие функциональности в стиле NSClassFromString
в чистом Swift означает, что я вынужден заранее объявлять компилятору все имена моих классов.
например получение класса с помощью очень длинного и утомительного оператора switch:
func drawingObjectFromClassName(_ className: String) -> SomeDrawingProtocol?
{
switch className {
case "foo": return foo()
case "bar": return bar()
// etc.
default:
print("Warning: no class found for className: ", className)
return nil
}
}
Но я также хотел бы проверить наличие подкласса (например, «foo») без создания экземпляра объекта.
Я мог бы продублировать этот оператор switch, чтобы сделать это, но тогда мне нужно было бы поддерживать два идентичных набора ключей. Фу.
Таким образом, одним из возможных решений является использование таблицы поиска.
Вопрос: если я жестко закодирую Dictionary со всеми именами моих подклассов в качестве ключей, какой синтаксис мне нужен для values , чтобы извлеченное значение могло быть создано как экземпляр объект требуемого класса? Спасибо за любую помощь.
foo.self
, чтобы получить объект класса (типаSomeDrawingProtocol.Type
). - person kennytm   schedule 10.10.2016