Swift 要应用于多种类型的协议扩展
我有一个协议,例如:Swift 要应用于多种类型的协议扩展,swift,protocols,swift4,swift-protocols,Swift,Protocols,Swift4,Swift Protocols,我有一个协议,例如: protocol P { func foo() } 可以为某些类型设置默认实现: extension P where Self == Int { func foo() { // do something } } 但是,如何对几种类型使用相同的默认实现呢?像这样: extension P where Self == Int or Self == Float { func foo() { // do somet
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
}
}
您可以将这些类型与另一个
协议
(例如hasdaultfoo
)结合起来。这允许类型在采用协议时决定是否需要默认实现
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()