具有“ where”的协议会导致崩溃

时间:2019-02-26 08:22:15

标签: ios swift protocols

我想使用@if($match->schedule < Carbon\Carbon::now()) &nbsp;<strong id="match_schedule">Match will start soon</strong> @endif 隐藏Protocol子类的类类型。因此,我创建了一个UIViewController,如下所示:

Protocol

和具体的课程:

protocol Displayable where Self: UIViewController {
    func display()
}

一切顺利,直到我在运行时执行class DisplayableViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } } extension DisplayableViewController: Displayable { func display() { _ = view } }

display()

崩溃发生在class ViewController: UIViewController { private var displayable: Displayable! override func viewDidLoad() { super.viewDidLoad() displayable = DisplayableViewController() displayable.display() } }

  

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)


删除_ = view或让where Self: UIViewController解决此问题,为什么?

我只希望UIViewController的子类符合它。

这里是demo来重现它。

快速版本:4.2

1 个答案:

答案 0 :(得分:3)

使您的类型为mainUIViewController的组合。

例如:

Displayable

这里是一些文档的链接,这些文档包含有关复合类型的相关信息:

https://docs.swift.org/swift-book/ReferenceManual/Types.html