You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4 停止引用模型及编辑页数据回退保存问题咨询

嘿,我来帮你搞定这两个Swift里的引用相关问题~

1. 如何在Swift 4中停止引用模型?

在Swift里,类是引用类型,而结构体/枚举是值类型——这是核心区别。如果你的模型是类,赋值给另一个变量时,两个变量会指向同一个内存实例,自然会同步变更。要打破这种引用关系,有两种实用方案:

方案一:把模型改成结构体

结构体默认是值语义,赋值时会自动创建完整的独立副本,两个变量完全互不影响:

// 把原来的类模型改成结构体
struct User {
    var name: String
    var age: Int
}

// 使用时,赋值就是拷贝操作
let originalUser = User(name: "Paresh", age: 30)
let demoUser = originalUser // 这里是独立副本,修改其中一个不会影响另一个

方案二:给类模型实现拷贝方法

如果因为业务逻辑不能改成结构体,那可以手动给类加一个拷贝方法,创建新的类实例并复制所有属性:

class User {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    // 实现拷贝方法,生成独立实例
    func copy() -> User {
        return User(name: self.name, age: self.age)
    }
}

// 使用时调用copy()获取独立实例
let originalUser = User(name: "Paresh", age: 30)
let demoUser = originalUser.copy() // 现在demoUser是全新实例,和originalUser互不干扰

2. 编辑页面修改模型后,演示模型同步变更的解决办法

你的问题本质还是引用类型的锅:你把原模型直接赋值给演示模型,两者指向同一个内存实例,所以编辑页修改原模型时,演示模型自然会跟着变。解决思路和上面一致,只需要在赋值演示模型时,使用独立副本而非原引用:

具体操作建议

  1. 当你需要创建演示模型时,不要直接写let demoModel = originalModel,而是用上面的拷贝方法(类模型),或者直接赋值(结构体模型),确保演示模型是独立的。
  2. 如果希望编辑页修改时不影响原模型,可以在进入编辑页前,先把原模型的副本传给编辑页,用户修改完成后,再按需把修改后的副本同步回原模型:
// 进入编辑页前,创建原模型的副本
let editModel = originalModel.copy()
// 把editModel传给编辑页,用户修改的是这个副本
// 编辑完成后,如果需要保存更改,再同步回原模型
originalModel.name = editModel.name
originalModel.age = editModel.age

这样一来,演示模型是原模型的独立副本,编辑操作不会直接影响它,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Paresh. P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:42:38