【发布时间】:2015-02-27 13:44:22
【问题描述】:
所以,我很快就会收到以下错误:
由于信号而导致命令失败:分段错误:11,在发出 IR SIL 功能时
在以下代码中通过类型约束创建类的新实例时:
public protocol AddOn {
init()
init(main: Main, name: String)
func getId() -> String
func description()
}
public class Foo : NSObject, AddOn {
private var _main: Main?
private var _name: String = ""
required override public init() {
}
required public init(main: Main, name: String) {
self._main = main
self._name = name
}
public func getId() -> String {
return "Foo"
}
public func description() {
NSLog("Class: %@", self.getId())
}
}
public class Main {
private var _addons = Dictionary<String, AddOn.Type>()
init() {
}
public func registerAddOn<T: AddOn>(addOnProtocol: T.Type) {
// Here it is possible to Init the AddOn.Type to an object (e.q. Foo())
let addOn: AddOn = addOnProtocol() as AddOn
self._addons[addOn.getId()] = addOnProtocol
}
public func createInstance(addonClassName: String) {
var getAddOnType: AddOn.Type = self._addons[addonClassName]!
//Segmentation fault 11: While emitting IR SIL function
let instance = getAddOnType(main: self, name: "Bar")
}
}
var client: Main = Main()
client.registerAddOn(Foo.self)
client.createInstance("Foo")
在 registerAddOn 我可以创建类 Foo 的新实例,但不能在 createInstance
【问题讨论】:
-
我自己解决了这个问题,我使用了除 T.Type 之外的 AnyClass。还要感谢 Mgetz,这个链接给了我一些新的灵感!我的解决方案已添加到问题中。
-
我将解决方案移至社区 wiki 答案。
标签: swift segmentation-fault initialization protocols type-constraints