gpt4 book ai didi

swift - 为什么以协议(protocol)为参数的函数不能与 Swift 中符合相同协议(protocol)的类型扩展一起使用?

转载 作者:行者123 更新时间:2023-11-28 13:37:03 25 4
gpt4 key购买 nike

我有一个协议(protocol) FnProtocolStringInt 符合该协议(protocol)。

protocol FnProtocol {

}

extension Int: FnProtocol {

}

extension String: FnProtocol {

}

然后我创建了一个函数 f3,它将 FnProtocol 作为参数。

func f3(_ x: FnProtocol) -> FnProtocol {
return x
}

接下来,comp 函数接受一组作用于 FnProtocol 的函数。

func comp(fns: [(FnProtocol) -> FnProtocol]) -> (FnProtocol) -> FnProtocol {
return fns[0]
}
func count(_ s: String) -> Int {
return s.count
}

考虑到StringInt都符合FnProtocol,为什么comp(fns: [count])失败但 comp(fns: [f3]) 有效?

comp(fns: [count])  // Cannot convert value of type '(String) -> Int' to expected element type '(FnProtocol) -> FnProtocol'

如何使它与 count 一起工作?

最佳答案

为了能够使用count(),它需要一个FnProtocol作为参数

func count(_ s: FnProtocol) -> Int {
return s.count
}

当然这意味着我们需要修改协议(protocol)并使 Int 遵守它

protocol FnProtocol {
var count: Int {get}
}

extension Int: FnProtocol {
var count: Int {
return String(self).count
}
}

关于swift - 为什么以协议(protocol)为参数的函数不能与 Swift 中符合相同协议(protocol)的类型扩展一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473231/

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