按名称获取课程

时间:2017-02-07 04:48:59

标签: swift metaprogramming

我可以按名字上课吗?例如:

class Foo {

}

class Bar {

}

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

我想使用元编程来减少代码维护。

2 个答案:

答案 0 :(得分:4)

您可以使用NSClassFromString

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

答案 1 :(得分: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
    }
}