Swift:按名称列出的对象实例
我喜欢只根据类的名称创建类的实例 这里是一个游乐场的示例代码Swift:按名称列出的对象实例,swift,Swift,我喜欢只根据类的名称创建类的实例 这里是一个游乐场的示例代码 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 ke
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)中)
- 有没有其他方法可以实现这一点李>
- 代码中有错误吗
- 你也有同样的问题吗
本质上的区别在于,我们讨论的是默认情况下没有init方法的pur-Swift类(而不是NSObject子类)。这个问题似乎在Swift 2.0中得到了解决(在Xcode的Beta 2中进行了测试) 以下调用将传递一个实例:
let obj = objClass.init(coder: testCoder)
有点离题,但请(如果你还没有)提交一个雷达文件-没有任何东西会使编译器崩溃!是,我已经创建了一个bug条目(20701151)