我喜欢用类的名称
创建一个类的实例这里是游乐场的示例代码
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
基本的区别在于我们在这里谈论一个纯Swift类(而不是NSObject子类),它默认没有init方法。
答案 0 :(得分:0)
这个问题在Swift 2.0中得到了解决(在Xcode的Beta 2中测试过)
以下调用提供了一个实例:
let obj = objClass.init(coder: testCoder)