我会 运行 遇到具有共享需求的协议的任何问题吗?
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也需要什么
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也需要什么