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
该代码不是自然的味道吗?还是在某些情况下这实际上可能会有所帮助?
答案 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也需要什么的简写。