函数覆盖和函数变异之间更准确的区别是什么?特别是在 swift
What is the more accurate difference between function overriding and function mutating? In swift particularly
本质上,两者都用于根据我们的自定义需求修改函数的行为。但是,当两种方法用于同一目的时,为什么有必要使用两种方法来做同一件事。
我假设,如果一个函数有 HEAD 需要 parameters 和BODY 具有特定的 功能 和这些参数
当我们必须在 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
本质上,两者都用于根据我们的自定义需求修改函数的行为。但是,当两种方法用于同一目的时,为什么有必要使用两种方法来做同一件事。
我假设,如果一个函数有 HEAD 需要 parameters 和BODY 具有特定的 功能 和这些参数
当我们必须在 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