1

如何在 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?。

4

0 回答 0