NSClassFromString不是完全动态的 - Swift2

时间:2016-02-16 17:22:38

标签: xcode swift swift2

我有这个示例代码:

let structType: String = "elearning_lesson"
    if let classType = NSClassFromString(structType) as? elearning_lesson.Type {
        let object = classType.init()
        object.lesson_id = "15"
        object.test()
    }

当然,structType值可能不同,所以我想要那样的东西

let structType: String = "elearning_lesson"
    if let classType = NSClassFromString(structType) as? structType.Type {
        let object = classType.init()
        object.lesson_id = "15"
        object.test()
    }

但我收到错误:'structType'不是类型

我如何完全动员课堂实习?

2 个答案:

答案 0 :(得分:4)

  

我如何完全动态课堂实现

在斯威夫特,你不能。斯威夫特是完全动态的对立面。这完全是静止的!必须明确知道并在编译时指定所有声明的类型。

(你正在深入了解Swift可以获得的Objective-C / Cocoa功能这一事实并没有改变它。)

答案 1 :(得分:1)

根据您的代码,我假设您想要动态选择一个类,然后调用已知方法。为此,您需要首先定义协议。例如:

protocol MyProtocol: class {
    init()
    var lessonID: String { get set }
    func test()
}

然后,您需要创建符合此协议的类。

完成后,您就可以执行此操作:

let className = "MyModule.MyClass" // this is how swift class names look like

if let classType = NSClassFromString(className) as? MyProtocol.Type {
    // call methods from your class, but only those specified in the protocol:
    let object = classType.init()
    object.lessonID = "15"
    object.test()
}