-1

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

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

当我们必须在HEAD进行修改时,使用变异功能。

变异-> HEAD ->参数

当我们必须在BODY处修改时使用覆盖函数

覆盖->身体->功能

我在互联网上搜索过..但在任何地方都找不到令人满意的解释。请帮助我更好地理解它们。如果我错了,请纠正我。

4

1 回答 1

2

变异

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
    }
}

这是一篇有用的帖子,可能会为您提供更多见解 - Swift 'mutating' 关键字是什么意思?

诸如类之类的引用类型就可以了,并且允许您更改其函数中的属性。

覆盖

覆盖是继承中使用的概念。由此我们可以推断出override适用于和值类型(struct/enums)等引用类型是没有问题的。

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

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
    }
}

有用的链接:https ://www.hackingwithswift.com/sixty/8/3/overriding-methods

于 2021-07-22T04:13:42.707 回答