Swift - 继承协议不继承泛型where约束

Swift - Inheriting protocol does not inherit generic where constraint

我正在尝试迁移到使用协议而不是子类化,但我仍然希望能够在执行更具体的逻辑之前委托到某个方法的 "super" 实现。下面是我为演示我想要的功能而编写的代码,但它正在崩溃。如果出于某种原因这是一个糟糕的 approach/missing 面向协议编程的要点,那么我很想知道为什么,但现在我只需要知道为什么会崩溃。谢谢!

import UIKit

protocol A where Self: UIView { }
extension A {
  func method () {
    print("protocol A")
  }
}

protocol B: A { }
extension B {
  func method () {
    print("protocol B")
    (self as A).method()
  }
}

class X: UIView, B {
  func method () {
    print("class X")
    (self as B).method()
  }
}

只需执行以下操作即可调用此代码:

let x = X()
x.method()

上面的代码在这一行出现 EXC_BAD_ACCESS 崩溃:

(self as A).method()

我有部分答案,尽管我仍然不明白到底发生了什么。我注意到此崩溃仅在我有

where Self: UIView 

协议 A 的约束。如果我删除约束,则不会发生崩溃。这让我觉得这个对象在某种程度上正在失去它作为 UIView 的状态,这就是问题所在。更具体的说,好像协议B继承自协议A的时候,并没有继承

where Self: UIView

子句,意味着转换为 B 并不意味着生成的实体是 UIView。按照这种思路,我可以通过更改以下代码来使上面的代码工作:

(self as B).method()

(self as B & UIView).method()

这对我来说似乎是一个错误,所以我会尝试引起 Swift 团队的注意。