【发布时间】:2015-07-18 15:37:49
【问题描述】:
我喜欢通过类名来创建一个类的实例
这里是来自游乐场的示例代码
import Cocoa
public protocol FCoding : class {
init(coder aDecoder: FCoder)
func encodeWithCoder(aCoder: FCoder)
}
// just some func for demo
public protocol FCoder {
func encodeString(strv: String?, forKey key: String)
func decodeStringForKey(key: String) -> String?
}
class TestCoder : FCoder {
var name = "TestCoder"
init () {}
func encodeString(strv: String?, forKey key: String) {}
func decodeStringForKey(key: String) -> String? {
return "111"
}
}
class Test : FCoding {
var text : String
required init(coder aDecoder: FCoder) {
var value = aDecoder.decodeStringForKey("1")
if value != nil {
text = value!
} else {
text = "!!!"
}
}
func encodeWithCoder(aEncoder: FCoder) {
aEncoder.encodeString(text, forKey: "1")
}
}
var testCoder = TestCoder()
let className = NSStringFromClass(Test)
let objClass = NSClassFromString(className) as! FCoding.Type
//let obj = objClass(coder: testCoder)
如果我取消注释最后一条语句,编译器会因分段错误而崩溃:11(在 XCode 版本 6.3.1 (6D1002) 中)
- 还有其他方法可以实现这一点吗?
- 代码中是否存在错误?
- 你有同样的问题吗?
这里有一个关于类似主题的讨论: Swift language NSClassFromString
本质的区别是这里我们谈论一个 pur Swift 类(而不是 NSObject 子类),它默认没有 init 方法。
【问题讨论】:
-
有点跑题了,但请(如果您还没有)提交雷达文件 - 编译器不会崩溃!
-
是的,我已经创建了一个错误条目 (20701151)
标签: swift