Xcode NSClassFromString不完全动态-Swift2

Xcode NSClassFromString不完全动态-Swift2,xcode,swift,swift2,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? 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”不是一个类型

如何完全动态化类实例

如何完全动态化类实例

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

(事实上,您正在使用可从Swift获得的Objective-C/Cocoa功能,这并不会改变这一点。)

如何完全动态化类实例

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


(事实上,您正在使用可从Swift访问的Objective-C/Cocoa功能,这一点没有改变。)

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

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()
}

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

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()
}

谢谢,我刚刚学习了swift语言,我不知道它可以和协议一起使用!我应该补充一点,您也可以使用基类而不是协议。如果所有子类都应该有一些默认行为,那么这将非常有用。还可以添加不需要字符串或使用NSClassFromString。这似乎是在转移视线……是的,可以使用存储类类型的变量,或者更好的泛型,但我不知道OP试图实现什么。谢谢,我只是学习了swift语言,我不知道它可以与协议一起使用!我应该补充一点,您也可以使用基类而不是协议。如果所有子类都应该有一些默认行为,那么这将非常有用。还可以添加不需要字符串或使用NSClassFromString。这似乎是在转移视线……是的,可以使用存储类类型的变量,或者更好的泛型变量,但我不知道OP试图实现什么。感谢澄清,我不知道我是否离开了一个良好的基础,我正在寻找一个替代方案,如果没有,@Beirs给我一个解决方案,谢谢大家的澄清,我不知道我离开时是否有良好的基础,如果没有,我正在寻找替代方案,@Beirs给我一个解决方案,谢谢你们