我只是试图了解为什么这不可能。为什么不能在此设置中使用动态类型。 (我把它放在操场上):
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/