如何在Swift4的协议中定义一个变量,该变量至少需要符合协议,还可以符合其他协议?
例如,如果协议声明变量应符合协议B,并且我希望实现中的变量符合不同协议(B + C)的组合,则我现在会收到错误消息。
// For example: Presenter can conform to default stuff
protocol A {
var viewController: C? { get set }
func presentDefaultStuff()
}
extension protocol A {
func presentDefaultStuff() {
viewController?.displayDefaultStuff()
}
// Presenter can conform to custom stuff
protocol B {
func presentCustomStuff()
}
// viewController can conform to default stuff
protocol C {
func displayDefaultStuff()
}
// viewController can conform to custom stuff
protocol D {
func displayCustomStuff()
}
class SomeClass: A & B {
// Gives an error: Type 'SomeClass' does not conform to protocol 'A'
// because protocol A defines that viewController needs to be of
// type C?
var viewController: (C & D)?
}
已编辑: 我编辑了我的原始帖子以使问题更清楚 我还找到了一种解决方案来实现我想要实现的目标: 我可以拆分该类并在符合以下协议之一的实现上进行扩展:
class someClass: B {
customViewController: (C & D)?
}
extension someClass: A {
var viewController: C? {
return customViewController
}
}
编译器会进行类型检查,以确保customViewController符合C?。