函数覆盖和函数变异之间更准确的区别是什么?特别是在 swift

What is the more accurate difference between function overriding and function mutating? In swift particularly

本质上,两者都用于根据我们的自定义需求修改函数的行为。但是,当两种方法用于同一目的时,为什么有必要使用两种方法来做同一件事。

我假设,如果一个函数有 HEAD 需要 parametersBODY 具有特定的 功能 和这些参数

当我们必须在 HEAD.

处修改时,使用

Mutating 函数

变异 -> HEAD -> 参数

Overriding 函数用于在 BODY

处进行修改

覆盖 -> BODY -> 功能

我在网上搜索过..但没有找到令人满意的解释。请帮助我更好地理解它们。如有不妥请指正

变异

Swift 结构是不可变对象,这意味着您不能在其函数中更改其属性。您需要明确提及您同意通过在函数定义中添加 mutating 关键字来更改其属性。然而,这个 mutating 术语只对 Swift 中的值类型是必需的 - 结构和枚举。

struct MutatingExample {
    var number: Int = 0
    
// Add 'mutating' to resolve the error
    func changeNumber(changedNumber: Int) {
        self.number = changedNumber // Error: Cannot assign to property: 'self' is immutable
    }
}

这是一个有用的 post,可能会为您提供更多见解 - What does the Swift 'mutating' keyword mean?

class 等引用类型就可以了,并且允许您更改其函数内的属性。

覆盖

覆盖是继承中使用的概念。由此我们可以推断override适用于class和值类型(struct/enums[=39等引用类型=]) 是不可能的。

顾名思义,我们使用关键字来覆盖现有功能,通常是超级 class 的功能。例如,

class Parent {
    func getName() {
        print("Parent")
    }
}

class Child: Parent {
    // Add override to resolve error
    func getName() {
        print("Child") // Error: Overriding declaration requires an 'override' keyword
    }
}

有用link:https://www.hackingwithswift.com/sixty/8/3/overriding-methods