【发布时间】:2017-01-28 20:42:08
【问题描述】:
从 Swift 2.2 转换到 3.0 后,我的 Array 扩展不再编译,因为它包含对全局标准库函数 min<T>(T,T) 的调用并显示编译器错误 extra argument in call。
这是重现错误的简单方法:
extension Array {
func smallestInt(first: Int, second: Int) -> Int {
return min(first, second) // compiler error: "Extra argument in call"
}
}
将相同的函数添加到Dictionary 的扩展时,我得到了同样的错误,而完全相同的代码在其他类型的扩展(例如String 或AudioBuffer)中编译得很好:
查看Array和Dictionary的文档,发现Sequence上有实例方法名为public func min() -> Element?和public func min(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?。虽然String 和AudioBuffer 都没有任何min(...) 功能。
这可能是我无法调用全局函数的原因吗?编译器无法区分全局func min<T>(T,T) 和self.min(...) 尽管它们的签名完全不同?
这是错误还是功能?我究竟做错了什么?如何在 Array 扩展内正确调用 min(T,T)?
【问题讨论】:
标签: arrays swift swift3 swift-extensions