本质上,两者都用于根据我们的自定义需求修改函数的行为。但是,当两者都用于同一目的时,为什么有必要使用两种方法来做同一件事。
我假设,如果一个函数具有带参数的HEAD和具有这些参数的特定功能的BODY
当我们必须在HEAD进行修改时,使用变异功能。
变异-> HEAD ->参数和
当我们必须在BODY处修改时使用覆盖函数
覆盖->身体->功能
我在互联网上搜索过..但在任何地方都找不到令人满意的解释。请帮助我更好地理解它们。如果我错了,请纠正我。
本质上,两者都用于根据我们的自定义需求修改函数的行为。但是,当两者都用于同一目的时,为什么有必要使用两种方法来做同一件事。
我假设,如果一个函数具有带参数的HEAD和具有这些参数的特定功能的BODY
当我们必须在HEAD进行修改时,使用变异功能。
变异-> HEAD ->参数和
当我们必须在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
}
}
这是一篇有用的帖子,可能会为您提供更多见解 - 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