gpt4 book ai didi

swift - 应用于多种类型的协议(protocol)扩展

转载 作者:搜寻专家 更新时间:2023-10-31 22:17:54 25 4
gpt4 key购买 nike

我有一个协议(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com