Могу ли я получить класс по его названию? Например:Получить класс по названию
class Foo {
}
class Bar {
}
let x = "Foo"
classByString(x) // need to return Foo
Я хочу использовать метапрограммирование для уменьшения обслуживания кода.
Могу ли я получить класс по его названию? Например:Получить класс по названию
class Foo {
}
class Bar {
}
let x = "Foo"
classByString(x) // need to return Foo
Я хочу использовать метапрограммирование для уменьшения обслуживания кода.
Вы можете использовать NSClassFromString
:
if let anyObj : AnyObject.Type = NSClassFromString("MyAppName.MySwiftClassFoo") {
//call Foo
} else {
//call Bar
}
Вам необходимо написать метод, подобный этому, в том же классе и просто передать имя класса, как описано в коде.
func classByString(_ strClassName: String) -> String? {
if strClassName == self.debugDescription.components(separatedBy: ".")[1].components(separatedBy: ":")[0] {
print("class name :- \(strClassName)")
return strClassName
} else {
return nil
}
}
Создать постоянный файл и записать все имя класса с постоянной переменной в нем, вам нужно написать один раз и использовать в любое время. –
@Jacky Спасибо, но мне нужно было нулевое обслуживание, когда нужно добавить новый класс, чтобы не забыть – Macabeus
@ Jacky Я могу сделать это в Ruby и Python, тогда я хотел бы знать, возможно ли это в Swift – Macabeus