我有一个理论问题,没有找到相关的题目。
在某种程度上,我决定对数组进行一个小的扩展:
var array = [Int]()
array += 1
代码非常简单:
extension Array {
mutating static func +=(lhs: Array, rhs: Element) {
lhs.append(rhs)
}
}
为了实现这一目标,我们结合了两个对我来说非常有意义的因素:
数组是一个结构,此操作需要一个变异
中缀运算符重载需要一个静态函数
不幸的是,这是不可能的,因为Swift不允许变异函数是静态的。这部分我不太明白。
最佳答案
因为mutating
并不意味着“变异任何东西”,而是“变异self
”。您的函数试图变异lhs
,而不是self
。
当前代码无法工作,因为正在按值传递lhs
。lhs
参数是调用方提供给它的任何参数的本地副本,因此您的函数所做的任何更改都将是函数的本地更改,并且不会持久。相反,您需要通过引用传递lhs
,将其作为inout Array
。
关于swift - Swift:为什么变异函数不能是静态的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47225058/