2017-10-25 15 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 } 
}