Swift协议继承

som*_*dev 6 swift swift-protocols

我有快速的代码:

protocol ParentProtocol {
    // stuff
}

protocol ChildProtocol: ParentProtocol {
    // additional stuff
}

protocol FooProtocol {
    var variable: ParentProtocol? { get }
}

class Foo:FooProtocol {
    var variable: ChildProtocol?
}
Run Code Online (Sandbox Code Playgroud)

我有编译器错误:

类型'Foo'不符合协议'FooProtocol'

我知道,根据FooProtocol,变量类型必须是ParentProtocol类型.另一方面ChildProtocol继承自ParentProtocol,所以它也是一个ParentProtocol

是否有任何解决方案以这种方式使用协议继承?

som*_*dev 5

我找到了具有关联类型的解决方案(/sf/answers/2660580191/

以我为例:

protocol FooProtocol {
   associatedtype T = ParentProtocol
   var variable:T? { get }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意,在符合该协议的类中,实际上T可以成为任何类型,不仅可以是ParentProtocol或它的子级(例如String)。 (2认同)