我会 运行 遇到具有共享需求的协议的任何问题吗?

Would I run into any problems with having protocols with shared requirements?

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(){

    }
}

我可能不会做这样的事情。但我问这个问题是因为我没有收到任何警告或任何警告。这不是一个错误吗?即协议见证 table 通过一个一致性符合两个要求并且它隐藏了它的一些变量,如果我只是在其中一个协议上将变量更改为 id 则要求会有所不同,难道这至少值得警告吗?然后可能会被 @sharedPWT :D

之类的东西静音

这段代码不是天生就有味道吗?或者在某些情况下这实际上会有帮助?

您的证人 table 想法是转移注意力,因为没有代码也没有调度。它比那简单得多。这两个协议都只是关于如何构建采用类型的说明;他们说“做这个”,而在你的采用者中你做那个,所以你符合这两个要求。没问题。

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

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

Isn't this code smell in it's nature? Or there are circumstances where this can actually be helpful?

这不是难闻的气味,事实上,这种事情在整个标准库中一直都在发生。毕竟,协议层次结构不就是您所概述的内容的一个示例吗?说协议P2采用协议P1只是shorthand说P1需要什么,P2也需要什么