繁体   English   中英

实体数组不会迅速变异吗?

[英]Array of entity does not mutate in swift?

用户实体模型

class UserEntity: NSObject {

    var isAlreadyUser:Bool

    init(isAlerdy:Bool){
        isAlreadyUser = isAlerdy
    }

}

应用程序委托/全局数组

let new = ["F","E","D","C","B","A"]
        for obj in new{
            arrUser.append(UserEntity(isAlerdy: false))
        }

视图控制器

   let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let home = Array(appDelegate.arrUser)

    home[0].isAlreadyUser = true

    print(appDelegate.arrUser[0].isAlreadyUser)

在我编辑本地home数组并将isAlreadyUser从false更新为true之后。 这也在全局数组中发生了变化。 即使我正在变异任何复制全局数组的副本,它仍然会在两个数组中对其进行更改。

我认为实体有些问题。 它很强,并且不会根据数组的局部范围而变化。

帮帮我。

编辑:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        var areAlreadyUsers:[UserEntity] = []

        areAlreadyUsers = Array(appDelegate.arrUser)

        areAlreadyUsers[0].isAlreadyUser = true

        print(appDelegate.arrUser[0].isAlreadyUser)

仍然没有帮助。 我的全局阵列仍在变化。

如果您要使UserEntity成为一个结构,就不会有问题。 如果不尝试使用struct而不是class的话,它是否需要为NSObject 这样,您就可以复制写入行为。

问题:

数组的元素是referenceType,因此将仅复制指向对象的指针。 因此,修改它们将在两个地方都反映出来。

解:

  1. 复制数组中包含的每个项目。

    您可以执行以下操作, let localArray = globalArray.map { $0.copy() } 请注意,您的对象应实现任何复制方法(例如copyWithZone ,这一点很重要。

  2. 使用诸如structclass的值类型代替class

关键是arrUserhome仅包含指向相同UserEntity对象的指针,这些对象是唯一的(未复制)。 因此,您只需要更改UserEntity属性的值UserEntity ,它显然会在所有地方得到反映。

您想要做的是重新考虑您的应用程序架构,为什么您要彻底改变此值? 例如,您可以创建一个数组

var areAlreadyUsers:[UserEntity] = []

并只保存指向用户的指针,您将获得true价值。 这样,此信息就不会保存在任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM