如何使用符合协议的动态类型

时间:2015-08-28 22:10:40

标签: ios swift

我只是想弄清楚为什么这是不可能的。为什么我不能使用此设置的动态类型。 (我把它放在游乐场):

protocol SomeProtocol {
    init()
}

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

let x: SomeProtocol.Type = SomeClass.self

x()

当它运行时,游乐场会崩溃,如果你试图在Xcode中放置这样的代码,它会抛出一个

  

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

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

我意识到这是一个奇怪的设置,所以我理解“你为什么要这样做?”的混乱。但是那边;可能吗?不可能?这是一个错误吗?我不明白协议是如何运作的吗?

1 个答案:

答案 0 :(得分:1)

工作正常。我在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()
    }
}