一尘不染

如何快速重载赋值运算符

swift

我想为CGFloat覆盖’=’运算符,例如下面的try:

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 '_'


阅读 209

收藏
2020-07-07

共1个答案

一尘不染

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

无法重载默认赋值运算符(=)。仅复合赋值运算符可以重载。同样,三元条件运算符(a?b:c)不能重载。

如果那不能说服您,只需将运算符更改为+=

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

并且您会注意到您将不再遇到编译错误。

产生误导性错误消息的原因可能是因为编译器将您试图重载的尝试解释为赋值

2020-07-07