是否可以在 Swift 中重载 += 运算符?
Posted
技术标签:
【中文标题】是否可以在 Swift 中重载 += 运算符?【英文标题】:Is it possible to overload += operator in Swift? 【发布时间】:2015-01-01 00:57:38 【问题描述】:是否可以在 Swift 中重载 += 运算符以接受例如 CGFloat
参数?如果有,怎么做?
我的方法(如下)不起作用。
infix operator += associativity left precedence 140
public func +=(inout left: CGFloat, right: CGFloat)
left = left + right
(编辑)重要提示:
上面的编码方法确实有效。请see my answer below解释为什么我认为它没有。
【问题讨论】:
【参考方案1】:对不起,我的错。运算符 += 不需要为 CGFloat
参数重载,因为这样的重载包含在 Swift 中。我试图做类似的事情
let a: CGFloat = 1.5
a += CGFloat(2.1)
这失败了,因为我无法分配给let
,而 XCode 显示的错误让我很困惑。
当然,我最初的问题(如下)中的方法适用于重载运算符。
infix operator += associativity left precedence 140
public func +=(inout left: CGFloat, right: CGFloat)
left = left + right
请随时投票结束此问题。
【讨论】:
【参考方案2】:CGFloat
的 +=
运算符已经可用,所以你只需要使用它 - 如果你希望它以不同的方式运行,你唯一能做的就是覆盖现有的运算符,但这当然是气馁。
而且+=
操作符本身已经存在,所以不需要再用这行声明:
infix operator += associativity left precedence 140
只有当它是一个全新的运算符时,你才应该声明一个新的运算符,例如:
infix operator <^^> associativity left precedence 140
但是,如果您想为未定义的其他类型重载 +=
运算符,这是正确的方法:
func += (inout lhs: MyType, rhs: MyType)
lhs = // Your implementation here
【讨论】:
请看我自己的回答 是的,刚刚读过。有趣的是,我在测试我的代码时犯了和你一样的错误......幸运的是我已经知道该运算符存在:) 很巧合 :) 谢谢你的回答以上是关于是否可以在 Swift 中重载 += 运算符?的主要内容,如果未能解决你的问题,请参考以下文章
c ++:是不是可以在派生类中定义重载运算符,这将工作objs基类类型