2017-10-31 5 views
0

Swift 3.2/4のKeyPathタイプで一般的な自己参照を使用できないのはなぜですか?Swift 3.2/4 KeyPathタイプで一般的な自己参照を使用できないのはなぜですか?

例:// Bと記された行のコメントを外さない限り、以下のコードがコンパイルされます。どうして?私が理由があるとすれば、// Bと記された行は、typealias Path<T> = KeyPath<Self,T>という文の意味で、// Aと記された行と全く同じものを意味するはずです。

ここに何か不足していますか、これは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 
} 

答えて

0

ルート、keypathを宣言するには、山括弧内の値が必要です。それはSwiftの型を持つArrayを宣言するようなものです。 これは動作するはずです:

var fooerPathB: F.Path<F, T> { get set } 
+0

上記の更新されたコードサンプルを参照してください。何とか最初に貼り付けたときに、はStackOverflow iOSアプリによって削除されました。しかし、ええ、私はF.Path を使用しています。これはキーパスのタイプアリアですので、完全に動作するはずです... – CommaToast

+0

私はXCode9/Swift4で私のためにコンパイルしています –

+0

あなたが提供している最新のコードサンプルはコンパイルしていますあなたのXcodeで? – CommaToast

関連する問題