2017-10-25 8 views
4
class Controller<U: NSObject> {} 

protocol Robert { 
    associatedtype T 
    associatedtype U: Controller<T> 
    var fetcher: U { get } 
} 

class Telephone: NSObject {} 

class Object: Telephone {} 

class Turtle: Controller<Object> {} 

class Fish: Robert { 

    typealias T = Object 
    typealias U = Turtle 

    let x = Turtle() 

    var fetcher: Turtle { 
    return x 
    } 

} 

私はなぜそれが理解できません。どんな助けもありがたい。クラスがプロトコルに準拠していません。どうして?

XCodeの 'fix it'オプションを選択すると、 'Fetcher'のスタブが挿入されます。しかし、Fetcherにはすでにタイプアリアがあります。

+1

タートルはコントローラである必要があります? –

+0

はい、この仮説的な状況では、タートルはコントローラになる必要があります –

+0

バグとして提起されました:https://bugs.swift.org/browse/SR-6218 –

答えて

1

これはSwift 4でas a bugと認識されています。今のところ、一般的な制約を持つ型によって制約される関連型は避けなければなりません。

は、これはそれが動作以下、その結果の削除

associatedtype U: Controller<T> 

クールではありません。

protocol Robert { 
    associatedtype T: NSObject 
    var fetcher: Controller<T> { get } 
} 
関連する問題