斯威夫特协议继承
问题描述:
我有SWIFT代码:斯威夫特协议继承
import Foundation
protocol ParentProtocol {
//stuff
}
protocol ChildProtocol:ParentProtocol {
//additional stuff
}
protocol FooProtocol {
var variable:ParentProtocol? { get }
}
class Foo:FooProtocol {
var variable:ChildProtocol?
}
我有编译器错误:Type 'Foo' does not conform to protocol 'FooProtocol'
我知道,根据FooProtocol
,变量的类型必须为ParentProtocol
类型。在另一方面,从ParentProtocol
ChildProtocol
继承,所以它也是一个ParentProtocol
是否有任何解决方案中使用的协议基业呀?
答
我发现相关类型(https://*.com/a/38008288/824285)
对我来说,该解决方案将是:
protocol FooProtocol {
associatedtype T = ParentProtocol
var variable:T? { get }
}
+1
请注意,在符合此协议的类中,“T”实际上可以成为任何类型,例如,不仅是“ParentProtocol”或它的子字符串“String”。 –
@ShadowOf是的,谢谢。与相关类型的解决方案按预期工作:http://*.com/a/38008288/824285 – somedev
相关:[我怎样才能使一个函数与一个子类返回类型符合协议,其中一个超类定义为返回类型?](http://*.com/questions/35094967/swift-how-can-i-make-a-function-with-a-subclass-return-type-conform-to-a-protoc) – Hamish
也相关(metatypes的一致性和继承性):[协议不符合自己?](http://*.com/questions/33112559/protocol-doesnt-conform-to-it-自己),引用MartinR:s评论,_“即使使用'protocol P:Q {}','P'也不符合'Q'“_。 – dfri