在 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

[转] 小程序修改数组中对象的某个值或者修改对象值

Swift 和 JSON 只解析一个对象而不是一个数组

将可比较的值类型 Int 应用于 Swift 4 中的 UIImage 对象

如何用setData修改数组

swift实现遍历嵌套字典并修改其中的值