【发布时间】:2020-12-08 15:28:45
【问题描述】:
给定一个Array 和struct
import Foundation
struct Card {
var flag: String = ""
}
var cards = Array<Card>()
cards.append(Card())
以下操作不会修改原始数组元素
// A copy is created.
var cardCopy = cards[0]
// Will NOT modify cards[0]
cardCopy.flag = "modify0"
print(cards[0].flag)
下面的操作会修改原来的数组元素
// We can modify cards[0] by
cards[0].flag = "modify"
print(cards[0].flag)
但是,从某种意义上说它并不高效,我们每次都需要执行索引访问。想象一下
cards[0].flag0 = "modify"
cards[0].flag1 = "modify"
cards[0].flag2 = "modify"
cards[0].flag3 = "modify"
...
有没有办法,我们可以创建对结构数组元素的引用?这样我们就可以编写
// How to create a reference to cards[0]?
var cardReference = ...
cardReference.flag0 = "modify"
cardReference.flag1 = "modify"
cardReference.flag2 = "modify"
cardReference.flag3 = "modify"
...
其中一种可能性是将struct 替换为class。但是,在此之前,我想探索其他替代方案。
【问题讨论】:
-
如果你需要修改你的 Card 实例很多,也许你应该把它变成一个类,或者用新值创建一个新实例并替换数组中的整个对象。
-
@JoakimDanielson 谢谢。在将其从结构转换为类之前,我想探索其他可能的替代方案(可能创建引用?)。
-
您不能将值类型转换为引用类型。正如其他人指出的那样,
inout与您将要获得的一样接近。
标签: ios swift struct reference