应用于多种类型的协议扩展
Protocol extension to be applied to several types
我有一个协议,例如:
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 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()
我有一个协议,例如:
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 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()