Swift:为什么变异函数不能是静态的

标签 swift operators value-type

我有一个理论问题,我没有找到相关主题。

在某些时候,我决定为数组做一个小的扩展会很好:

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

代码很简单:

extension Array {
    mutating static func +=(lhs: Array, rhs: Element) {
        lhs.append(rhs)
    }
}

为了实现这一目标,我们结合了两个对我来说非常有意义的因素:

  • 数组是一个结构体,这个操作需要修改
  • 中缀运算符重载需要一个静态函数

不幸的是,这是不可能的,因为 Swift 不允许变异函数是静态的。这是我不太明白的部分。

最佳答案

您的 += 改变了第一个参数,而不是 Array 类型。 因此它不能被声明为变异(这使得没有 对静态方法有意义,因为你不能改变类型),但第一个参数必须是 inout:

extension Array {
    static func +=(lhs: inout Array, rhs: Element) {
        lhs.append(rhs)
    }
}

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

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

相关文章:

javascript - 多个条件用 OR ||在 'if' 声明 JS

JavaScript - 运算符

operators - PromQL If 条件和或运算符

c# - 为什么我的 INT 变量是通过引用传递的? C#

c# - 如何使用属性在 C# 中处理值类型?

xcode - 大 Swift 类导致 Xcode 中的自动完成速度较慢 - 如何拆分为多个文件

ios - 为什么我的 SwiftUI 列表用相同的项目填充了 4 次而不是所有 4 个项目?

ios - ReactiveCocoa 3 : Map signal to value (Swift)

arrays - 按最低值和最高值连接两个数组

模板参数的 C++ value_type