我只是试图了解为什么这不可能。为什么不能在此设置中使用动态类型。 (我把它放在操场上):

protocol SomeProtocol {
    init()
}

class SomeClass : SomeProtocol {
    required init() { }
}

let x: SomeProtocol.Type = SomeClass.self

x()


运行此命令时,游乐场将崩溃,如果您尝试将这样的代码放入Xcode,它将抛出一个


  命令由于信号失败:分段错误:11


但是,如果我从不调用x(),则可以将x打印为正确的SomeClass.Type。

我意识到这是一个奇怪的设置,所以我理解“为什么要这么做?”的困惑。除此之外可能吗?不可能?是虫子吗?我是否不了解协议的真正工作原理?

最佳答案

它工作正常。我在Xcode 7中尝试了您的代码,它可以编译并运行。当然,在实际代码中,您不能在最高级别说x()。在Swift 2中,您必须说x.init(),而不是x()。但是,当您这样做时,就可以了。

protocol SomeProtocol {
    init()
}
class SomeClass : SomeProtocol {
    required init() { }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let x: SomeProtocol.Type = SomeClass.self
        x.init()
    }
}

关于ios - 如何使用符合协议(protocol)的动态类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32280486/

10-12 14:47