gpt4 book ai didi

swift - 为什么这个 Swift 结构需要 "mutating"?

转载 作者:行者123 更新时间:2023-11-28 11:35:53 25 4
gpt4 key购买 nike

<分区>

我遗漏了一些有关 Swift 中可变性概念的信息。我通常使用对象而不是结构来获得可观察性,因此值语义对我来说仍然是新的。

struct Game {
var map: [[Int]]

所以我在这里声明了 map 是可变的。那么为什么在这样的方法中......

  mutating func createPlayer() {
// emptyLocation -> (Int, Int)
let (X,Y) = emptyLocation()
map[X][Y] = .player
}

...我必须使用变异吗?是的,该函数正在发生变化,但原始结构是这样声明的。似乎实际上每个 func 都会在实践中发生变异,这似乎违背了标记的目的。

还有其他方法可以做到这一点吗? mutating 的常见用法是否表明我应该避免性能/内存问题?

更新:我对结构的内部状态“泄露”到周围代码的方式感到相当不安;如果您在结构内声明一个成员 var 那么它也必须在结构外,即使您从未更改过。这违反了我能想到的每一个封装概念。所以我将 struct 更改为 class,删除了所有 mutating,然后就完成了。我明白了,但我不确定我是否完全理解实现。对于这个 Swift 菜鸟来说,mutating 似乎是编译器可以在我不告诉它的情况下确定的东西 - 成员是否声明为 var?函数是否真的改变了它?等等

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com