我有这个示例代码:
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'不是类型
我如何完全动员课堂实习?
答案 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()
}