Swift 编译器错误 : Segmentation-fault 11 thrown when using type constraints

标签 swift segmentation-fault initialization protocols type-constraints

所以,很快我就收到了以下错误:

Command failed due to signal: Segmentation fault: 11, While emitting IR SIL function

在以下代码中通过类型约束创建类的新实例时:

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 中创建

最佳答案

OP 的解决方案。

private var _addons = Dictionary<String, AnyClass>()
    public func registerAddOn(addOnProtocol: AnyClass) {
        let addOnType = addOnProtocol as NSObject.Type
        let addOn: AddOn = addOnType() as AddOn
        self._addons[addOn.getId()] = addOnProtocol
    }

    public func createInstance(addonClassName: String) {
        var getAddOnType: AddOn.Type = self._addons[addonClassName]!
        let instance = getAddOnType(main: self, name: "Bar")
    }
}

关于Swift 编译器错误 : Segmentation-fault 11 thrown when using type constraints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766541/

相关文章:

ios - 如何使用 branch.io 访问分配给 URL 的参数?

python - C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中没有

java - 在创建期间填充 HashMap

java - Java 中由 new String() 和 new String (""进行的字符串初始化有什么区别?

ios - 使用 FPSignup ViewController 注册/解析时小写所有条目

ios - 隐藏键盘时隐藏快捷方式栏 ios(Ipad)

swift - 将目标添加到 Swift 中的按钮

linux - 如何从程序集 nasm x86 linux 8086 调用 printf

c - 如何查找C代码中的段错误?

带有列表初始化的 C++11 嵌套映射