为什么不能在 Swift 3.2/4 KeyPath 类型别名中使用通用的 Self 引用?
示例:除非您取消注释标记的行,否则以下代码将编译// B
。为什么?据我所知,由于语句,标记的行// B
应该与标记的行完全相同。// A
typealias Path<T> = KeyPath<Self,T>
我在这里遗漏了什么,还是这是一个 Swift 编译器错误?
protocol Fooer {
associatedtype T
typealias Path<T> = KeyPath<Self, T>
var baz: T { get }
}
protocol FooPathContainable {
associatedtype F: Fooer
associatedtype T where F.T == T
var fooerPathA: KeyPath<F,T> { get set } // A
var fooerPathB: F.Path<T> { get set } // B <— causes compiler crash with Segmentation Fault 11
}