使用共享需求的协议会遇到任何问题吗?

时间:2018-11-27 20:14:26

标签: swift protocols composition swift-protocols

protocol House {
    var name : String {get set}
    func changeAddress()
}

protocol Person {
    var name : String {get set}
    func changeAddress()
}

class Something : Person, House {
    var name : String

    init (name: String){
        self.name = name
    }
    func changeAddress(){

    }
}

很可能我不会做这样的事情。但是我问这个问题是因为我没有得到任何警告或任何其他要求。这不是错误吗?也就是说,协议见证表通过一种一致性来满足两个需求,并且它隐藏了一些变量,如果我只是在其中一个协议上将变量更改为id,那么需求就会有所不同,不是这至少值得警告吗?然后用@sharedPWT来使它静音:D

该代码不是自然的味道吗?还是在某些情况下这实际上可能会有所帮助?

1 个答案:

答案 0 :(得分:2)

您的见证人表的想法是一个红色的鲱鱼,因为没有代码,也没有调度。比这简单得多。两种协议都只是关于如何构造采用类型的说明。他们说“做到这一点”,在您的采用者中做到这一点,因此您同时符合这两个要求。没问题。

如果这些是带有扩展和实现的方法,那么现在我们有话要说!例如:

protocol A {
    func f()
}
extension A {
    func f() { print("A")}
}
protocol B {
    func f()
}
extension B {
    func f() { print("B")}
}
class C:A,B {} // compiler stops you, rightly
  

该代码不是自然的味道吗?还是在某些情况下这实际上可能会有所帮助?

这不是难闻的气味,实际​​上,从真正意义上讲,这种情况在整个标准库中一直存在。毕竟,协议层次结构是什么,但您要概述的一个例子呢?说协议P2采用协议P1只是表示无论P1需要什么,P2也需要什么的简写。