在 Swift 中修改数组中对象的值
Posted
技术标签:
【中文标题】在 Swift 中修改数组中对象的值【英文标题】:Modify the value of an object in an array in Swift 【发布时间】:2014-07-27 17:33:54 【问题描述】:我在为数组中的对象赋值时遇到问题。
让我解释一下我做了什么。 collection 是一个结构体:
struct Collection
var selection : Int = -1
object 是一个包含 Collection 对象数组的对象,它也是一个结构体:
struct Object
var collection : [Collection]
如果我使用以下代码,则不会分配值:
fun onSelected(index Int, selectedIndex Int)
var collection = self.object.collection[index]
collection.selection = selectedIndex
这可能是因为数组是 Swift 中的值类型。我说的对吗?
然后我把我的代码改成:
fun onSelected(index Int, selectedIndex Int)
self.object.collection[index].selection = selectedIndex
然后我得到一个编译错误,错误信息是:
/卷/Macintosh 高清/用户/公共/项目/测试/控制器/MyViewController.swift:214:9: '@lvalue $T8' 与 'Int' 不同
发生了什么?我应该怎么做才能将值分配给我的数组中的对象?谢谢
编辑
我已将我的 source code 添加到 Dropbox。它包括我使用的两种方法。如果您有兴趣,请尝试一下。谢谢!
【问题讨论】:
谁能解释一下。错误信息是什么意思?谢谢 我认为这个问题在某种程度上与变异问题有关。我定义了我的 object 类似 var obj : Object 的东西,但它仍然是不可变的。为什么? 【参考方案1】:这段代码对我来说很好用:
struct Collection
var selection : Int = -1
struct Object
var collection : [Collection]
var object = Object(collection: [Collection(selection: 0)])
var collection = object.collection[0]
collection.selection = 1
object.collection[0].selection //0
object.collection[0].selection = 2
object.collection[0].selection //2
您的代码中的 selectedIndex 和 index 定义在哪里?看起来其中之一是导致问题的原因。您可能需要将它们转换为 Int,例如 Int(selectedIndex)
。
【讨论】:
其实我在一个方法中调用它。这两个是方法中的参数。顺便说一句,代码在操场上很好,但在我的项目中却不行。【参考方案2】:事实证明,如果我这样声明我的对象,它将解决问题:
var object : Object = Object()
之前我声明为:
var object : Object!
【讨论】:
以上是关于在 Swift 中修改数组中对象的值的主要内容,如果未能解决你的问题,请参考以下文章
使用数组中的新信息更新该对象并显示 tableview Swift