我只是想弄清楚为什么这是不可能的。为什么我不能使用此设置的动态类型。 (我把它放在游乐场):
protocol SomeProtocol {
init()
}
class SomeClass : SomeProtocol {
required init() { }
}
let x: SomeProtocol.Type = SomeClass.self
x()
当它运行时,游乐场会崩溃,如果你试图在Xcode中放置这样的代码,它会抛出一个
命令因信号失败:分段错误:11
但是,如果我从不调用x()
,我可以打印出x为正确的SomeClass.Type。
我意识到这是一个奇怪的设置,所以我理解“你为什么要这样做?”的混乱。但是那边;可能吗?不可能?这是一个错误吗?我不明白协议是如何运作的吗?
答案 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()
}
}