Протокол с ошибкой предложения where при доступе к свойствам после приведения - PullRequest
0 голосов
/ 28 февраля 2019

Приведение объекта к протоколу (что определено с помощью условия 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
}

Я пробовал разные вещи.

  1. Удалить, где предложение where Self: UIViewController, сбой исчез.
  2. Не происходит сбой, если объект доступен без приведения.Это отлично работает

    let vc = MyViewController(); print(vc.id)

  3. Если пометить протокол как Class-Only, он работает нормально и не падает, но есть предупреждение

    Ограничение подчиненного объекта 'Self': 'AnyObject'

enter image description here

...