<分区>
我想使用 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()
}
}
崩溃发生在 _ = view
。
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
去掉where Self: UIViewController
或者让(displayable as?DisplayableViewController).display()
解决这个问题,但是为什么呢?
我只希望 UIViewController 的子类符合它。
这是 demo重现它。
swift 版本:4.2