我有一个理论问题,没有找到相关的题目。
在某种程度上,我决定对数组进行一个小的扩展:

var array = [Int]()
array += 1

代码非常简单:
extension Array {
    mutating static func +=(lhs: Array, rhs: Element) {
        lhs.append(rhs)
    }
}

为了实现这一目标,我们结合了两个对我来说非常有意义的因素:
数组是一个结构,此操作需要一个变异
中缀运算符重载需要一个静态函数
不幸的是,这是不可能的,因为Swift不允许变异函数是静态的。这部分我不太明白。

最佳答案

因为mutating并不意味着“变异任何东西”,而是“变异self”。您的函数试图变异lhs,而不是self
当前代码无法工作,因为正在按值传递lhslhs参数是调用方提供给它的任何参数的本地副本,因此您的函数所做的任何更改都将是函数的本地更改,并且不会持久。相反,您需要通过引用传递lhs,将其作为inout Array

关于swift - Swift:为什么变异函数不能是静态的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47225058/

10-11 02:32