Swift 协议扩展,其中Self为ClassA或ClassB
我有一个协议,在一致性类为Swift 协议扩展,其中Self为ClassA或ClassB,swift,protocols,Swift,Protocols,我有一个协议,在一致性类为ClassA或ClassB的情况下,我希望为其提供默认功能。是否可以在协议扩展where子句中使用|?我尝试了以下方法,但无效: extension Protocol where Self: ClassA || Self: ClassB { func method() { // implementation if conforming class is ClassA OR ClassB } } 不,您不能在协议扩展的where子句中使用
ClassA
或ClassB
的情况下,我希望为其提供默认功能。是否可以在协议扩展where子句中使用|
?我尝试了以下方法,但无效:
extension Protocol where Self: ClassA || Self: ClassB {
func method() {
// implementation if conforming class is ClassA OR ClassB
}
}
不,您不能在协议扩展的
where
子句中使用|
(或类似的内容)
如果扩展方法需要同时存在于
ClassA
和ClassB
中的某些功能,那么您可以在协议中定义这些功能(这两个类都符合),并将扩展约束到该协议。否,您不能使用|
(或类似的东西)在协议扩展的where
子句中
如果扩展方法需要在
ClassA
和ClassB
中都存在的某些功能,那么您可以在协议中定义这些功能(这两个类都符合),并将扩展限制到该协议。目前根本不可能。一种解决方案是创建两个不同的扩展
扩展协议,其中Self:ClassA{
func方法(){
公共方法()
}
}
扩展协议,其中Self:ClassB{
func方法(){
公共方法()
}
}
private func commonMethod(){
//把你的东西放在这里
}
或者创建一个公共协议,假设ClassA
和ClassB
符合此协议
协议公共协议{}
类ClassA:协议,CommonProtocol{}
类ClassB:协议,CommonProtocol{}
扩展协议,其中Self:CommonProtocol{
func方法(){
//你的东西
}
}
目前这根本不可能。一种解决方案是创建两个不同的扩展
扩展协议,其中Self:ClassA{
func方法(){
公共方法()
}
}
扩展协议,其中Self:ClassB{
func方法(){
公共方法()
}
}
private func commonMethod(){
//把你的东西放在这里
}
或者创建一个公共协议,假设ClassA
和ClassB
符合此协议
协议公共协议{}
类ClassA:协议,CommonProtocol{}
类ClassB:协议,CommonProtocol{}
扩展协议,其中Self:CommonProtocol{
func方法(){
//你的东西
}
}
什么不起作用,你会收到错误消息吗?不,语法不可识别。你不能–定义两个类都符合的协议,然后使用where Self:CommonProtocol
。什么不起作用,你会收到错误消息吗?不,语法不可识别您不能–定义两个类都符合的协议,并使用where Self:CommonProtocol
。谢谢。我现在意识到这是唯一的方法,因为扩展无法确定您是指ClassA还是ClassB,所以您需要一个协议来定义它们的共性。谢谢。我现在意识到这是唯一的方法,因为扩展无法确定您是指ClassA还是ClassB,所以您需要一个协议来定义它们的共性。