我有一个协议(protocol),例如:
protocol P {
func foo()
}
可以对某些类型进行默认实现:
extension P where Self == Int {
func foo() {
// do something
}
}
但是如何让几种类型具有相同的默认实现呢?像这样:
extension P where Self == Int or Self == Float {
func foo() {
// do something
}
}
最佳答案
您可以将类型与另一个协议(protocol)
(例如HasDefaultFoo
)联合起来。这允许类型在需要默认实现时决定何时采用协议(protocol)。
protocol P {
func foo()
}
protocol HasDefaultFoo {
func foo()
}
extension Int: P, HasDefaultFoo { }
extension Float: P, HasDefaultFoo { }
extension P where Self: HasDefaultFoo {
func foo() {
print(self)
}
}
extension Double: P {
func foo() {
print("I provide my own foo()")
}
}
示例:
5.foo()
(5.5 as Float).foo()
5.5.foo()
输出:
5 5.5 I provide my own foo()
关于swift - 应用于多种类型的协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51210967/