gpt4 book ai didi

swift - 如何将值类型对象用作引用类型?

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:15 34 4
gpt4 key购买 nike

在我的模型中,我有一些数组:

var thisArray = [Object]
var thatArray = [Object]
var anotherArray = [Object]

在我的 View Controller 中,我想打开一个值以确定我将追加到哪个数组:

var whichArray: [Object]!
switch someValue {
case .thisArray: whichArray = thisArray
case .thatArray: whichArray = thatArray // "He went thatArray!"
case .anotherArray: whichArray = anotherArray
}
whichArray.append(object)

但这当然行不通,因为 Array 是一种值类型。

有没有办法做到这一点?当然,我可以执行以下操作:

switch someValue {
case .thisArray: thisArray.append(object)
case .thatArray: thatArray.append(object)
case .anotherArray: anotherArray.append(object)
}

但这太不优雅和多余了!如果周围的代码中发生了其他更复杂的事情,那就尤其如此。

这里有解决办法吗?是否可以创建对值类型的引用?

附言。更好的是,虽然这确实是它自己的问题,但我是否可以使用案例的名称(例如,someValue = .thisArray 的“thisArray”)来设置数组,按名称(即避免整个 switch 语句,只说 objectName.append(object) 或类似的东西)但据我所知这不是一回事。或者这可能吗?也许今天是我的生日?

最佳答案

Arrays值类型 - 正如您自己所说的 - 它们不能作为引用传递(或分配)。一种解决方案是为 Array 创建一个包装器类它本身就是一个引用类型。然后您可以分配这个包装类而不是数组本身。

现在,鉴于您还说过您可能更愿意访问 Arrays按名称完全摆脱switch您可以将设计更改为存储 thisArray , thatArrayanotherArrayDictionary ,键是 someValue 的不同值.

这样你就可以简单地附加到所需的数组:

arrayDict[someValue]?.append(object)

(假设您事先已经正确设置了字典)

例如:

enum Value {
case thisArray
case thatArray
case anotherArray
}

var arrayDict = [
Value.thisArray : [String](),
Value.thatArray : [String](),
Value.anotherArray : [String]()
]

arrayDict[.thatArray]?.append("Some String.")

为了创建一个简短的工作示例,我替换了 ObjectString但这显然无关紧要。

关于swift - 如何将值类型对象用作引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833469/

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