제네릭 형식 요구 사항을 단지 참조 형식으로 제한하는 데 문제가 있습니다. 여기에 몇 가지 예제 코드입니다 :스위프트 일반 참조 유형
class WeakHolder<Element: AnyObject> {
weak var element: Element?
init(element: Element) {
self.element = element
}
}
protocol Animal: class { }
class Dog: Animal { }
let dog: Animal = Dog()
let holder = WeakHolder<Animal>(element: dog) // Error: Using "Animal" as a concrete type conforming to protocol 'AnyObject' is not supported.
내가 <Element: class>
에 일반 요구 사항을 변경하는 경우, 나는 오류 class constraint can only appear on protocol declarations
를 얻을.
제네릭의 제한 사항입니까? 프로토콜을 클래스로 표시하면 해당 프로토콜에 대한 약한 참조를 가질 수 있습니다. 제네릭에는 해당 사항이 없습니까?
Dog는 프로토콜이므로, AnyObject가 아닙니다. –
저의 작은 경험에 비추어 볼 때 이것은 스위프트 2.3의 제네릭에 대한 제한 사항 일 수 있습니다. 프로토콜 대신 클래스를 사용하여이 문제를 해결할 수도 있습니다. –
구현시 프로토콜을 사용해야합니다. – Mark