0

为什么不能在 Swift 3.2/4 KeyPath 类型别名中使用通用的 Self 引用?

示例:除非您取消注释标记的行,否则以下代码将编译// B。为什么?据我所知,由于语句,标记的行// B应该与标记的行完全相同。// Atypealias 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
}
4

1 回答 1

0

root,keypath 的值,在尖括号内,是声明 keypath 所必需的。这就像在 Swift 中使用类型声明 Array。这应该有效:

 var fooerPathB: F.Path<F, T> { get set }
于 2017-10-31T16:40:01.623 回答