如何在swift中重载赋值运算符

mcf*_*oft 25 operator-overloading ios swift

我想覆盖CGFloat的'='运算符,如下面的尝试:

func = (inout left: CGFloat, right: Float) {
    left=CGFloat(right)
}
Run Code Online (Sandbox Code Playgroud)

所以我可以做以下事情:

var A:CGFloat=1
var B:Float=2
A=B
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?我收到了错误Explicitly discard the result of the closure by assigning to '_'

Ant*_*nio 31

这是不可能的 - 如文档中所述:

无法重载默认赋值运算符(=).只有复合赋值运算符才能重载.类似地,三元条件运算符(a?b:c)不能过载.

如果这不能说服你,只需将运算符更改为+=:

func +=(left: inout CGFloat, right: Float) {
    left += CGFloat(right)
}
Run Code Online (Sandbox Code Playgroud)

你会注意到你将不再收到编译错误.

误导性错误消息的原因可能是因为编译器正在解释您作为赋值重载的尝试


fnc*_*c12 11

您无法覆盖分配,但您可以在您的情况下使用不同的运算符.例如&=运营商.

func &= (inout left: CGFloat, right: Float) {
    left = CGFloat(right)
}
Run Code Online (Sandbox Code Playgroud)

所以你可以做到以下几点:

var A: CGFLoat = 1
var B: Float = 2
A &= B
Run Code Online (Sandbox Code Playgroud)

顺便说运营商&+,&-,&*存在于迅速.它们代表C风格的操作而没有溢出.更多