如何在swift中重载赋值操作符

我想重写一个CGFloat的'='运算符,如下所示:

func = (inout left: CGFloat, right: Float) { left=CGFloat(right) } 

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

 var A:CGFloat=1 var B:Float=2 A=B 

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

这是不可能的 – 正如文件中所述:

过载默认的赋值运算符(=)是不可能的。 只有复合赋值运算符可以被重载。 同样,三元条件运算符(a?b:c)也不能重载。

如果这不能说服你,只要将操作符更改为+=

 func += (inout left: CGFloat, right: Float) { left = CGFloat(right) } 

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

误导性错误信息的原因可能是因为编译器正在将您的尝试解释为分配

你不能覆盖分配,但你可以在你的情况下使用不同的操作符。 例如&=运算符。

 func &= (inout left: CGFloat, right: Float) { left = CGFloat(right) } 

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

 var A: CGFLoat = 1 var B: Float = 2 A &= B 

顺便说一句,运算符&+&-&*存在是很快的。 它们代表C风格的操作,没有溢出。 更多