Приведение объекта к протоколу (что определено с помощью условия where) и доступ к свойствам, вызывающим сбой EXC_BAD_ACCESS
.
Пример кода, который вылетает на Swift Playground.
protocol ProtocolA where Self: UIViewController {
var id: Int { get set}
}
class MyViewController: UIViewController, ProtocolA {
var id = 10
}
let vc:UIViewController = MyViewController()
if let protocolA = vc as? ProtocolA {
print(protocolA.id) // Crash here EXC_BAD_ACCESS
}
Я пробовал разные вещи.
- Удалить, где предложение
where Self: UIViewController
, сбой исчез. Не происходит сбой, если объект доступен без приведения.Это отлично работает
let vc = MyViewController();
print(vc.id)
Если пометить протокол как Class-Only, он работает нормально и не падает, но есть предупреждение
Ограничение подчиненного объекта 'Self': 'AnyObject'
![enter image description here](https://i.stack.imgur.com/Sjqgj.png)