2017-02-07 6 views
2

Могу ли я получить класс по его названию? Например:Получить класс по названию

class Foo { 

} 

class Bar { 

} 

let x = "Foo" 
classByString(x) // need to return Foo 

Я хочу использовать метапрограммирование для уменьшения обслуживания кода.

+0

Создать постоянный файл и записать все имя класса с постоянной переменной в нем, вам нужно написать один раз и использовать в любое время. –

+0

@Jacky Спасибо, но мне нужно было нулевое обслуживание, когда нужно добавить новый класс, чтобы не забыть – Macabeus

+0

@ Jacky Я могу сделать это в Ruby и Python, тогда я хотел бы знать, возможно ли это в Swift – Macabeus

ответ

2

Вы можете использовать NSClassFromString:

if let anyObj : AnyObject.Type = NSClassFromString("MyAppName.MySwiftClassFoo") { 
    //call Foo 
} else { 
    //call Bar 
} 
0

Вам необходимо написать метод, подобный этому, в том же классе и просто передать имя класса, как описано в коде.

func classByString(_ strClassName: String) -> String? { 
    if strClassName == self.debugDescription.components(separatedBy: ".")[1].components(separatedBy: ":")[0] { 
     print("class name :- \(strClassName)") 
     return strClassName 
    } else { 
     return nil 
    } 
} 
Смежные вопросы