为什么这种基类型扩展不起作用?

Tra*_*ggs 5 generics extension-methods swift

尝试使用扩展程序,但是在使用以下内容时遇到问题:

let value = -13
abs(value)

extension Int {
    var abs:Int {
        return abs(self) // -> Cannot invoke 'abs' with an argument list of type '(Int)'
    }
}

value.abs
Run Code Online (Sandbox Code Playgroud)

编译错误很奇怪,因为它可以abs()Int一个参数直接运行上面的函数.我猜我还有一些灯泡可以触发仿制药.开导我.

vrw*_*wim 4

Swift 编译器对您将abs变量用作函数感到困惑,而它无法做到这一点。现在您可以查看所有答案并重命名您的变量,但这些并不能深入了解 Swift 函数的工作原理。

Swift 自动导入Swift框架,并在其中定义其静态函数。要使用这些函数,通常不需要指定它来自框架,但在这种情况下,您应该指定要使用框架abs中的方法Swift

因此,在所有解释之后,这是您的代码,它将起作用:

let value = -13
abs(value)

extension Int {
    var abs: Int {
        return Swift.abs(self)
    }
}

value.abs
Run Code Online (Sandbox Code Playgroud)