首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSArchiving数组之前重置Swift变异属性

在NSArchiving数组之前重置Swift变异属性
EN

Stack Overflow用户
提问于 2018-03-11 00:09:51
回答 1查看 59关注 0票数 0

这种奇怪的行为,因为我觉得逻辑是合法的。

基本上,我有一个播放器对象数组。我调用一个函数将每个对象的isActive属性设置为true,并替换数组中的对象。然后,我调用savePlayers将更新后的对象数组归档到磁盘,但我设置的属性似乎又重置为false

Swift 4

Xcode 9.2

iOS 11.0

相关代码如下:

代码语言:javascript
复制
var players = [Player]()

func activatePlayers() {
    for (index, player) in players.enumerated() {
         player.isActive = true
        players[index] = player
    }

    // just as a test, see if property is there/updated
    for(_, player) in players.enumerated() {
        print("\(player.name): \(player.isActive)") // prints “chris: true”
    }

    savePlayers()
}

func savePlayers()
{
    // just a test to see if property is mutated
    for(_, player) in players.enumerated() {
       print("\(player.name): \(player.isActive)") // prints “chris: false”
    }

    NSKeyedArchiver.archiveRootObject(players, toFile: Player.archiveURL.path)
}

除了我发布的内容之外,没有任何其他代码会改变这些属性。这是线程问题吗?有没有什么我应该做的不一样的事情?

希望我已经盯着它看了太久,有人会指出显而易见的事情!

EN

回答 1

Stack Overflow用户

发布于 2018-03-11 00:20:50

我认为这一行可能会导致问题:

代码语言:javascript
复制
players.[index] = player

isActive属性设置为true后,将其中isActive仍设置为false的对象分配回数组。这是由于Swift中for循环的性质造成的。您不需要修改数组中的原始项,而是修改它的副本

考虑使用这个for循环(未测试):

代码语言:javascript
复制
for index in 0..<players.count {
    players[index].isActive = true
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49211213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档