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

Swift页面间数据模型共享问题:如何实现ClassA与ClassB共享可双向编辑的DataModel并同步更新值

解决ClassA与ClassB共享可编辑DataModel的问题

这问题我太懂了!你现在遇到的核心问题有两个:一是值类型的拷贝特性,二是代码里的初始化顺序错误,咱们逐个解决:

问题根源拆解

  1. 值类型导致数据不共享:你定义的DataModel是struct,Swift里struct是值类型,当你把它传给ClassB的初始化方法时,会自动创建一个副本。这意味着ClassA和ClassB手里的dataModel是完全独立的两个对象,修改任何一边都不会影响另一边。
  2. 初始化顺序错误:在ClassA里,你先创建了ClassB实例,之后才给dataModel.firstName赋值为"ABC"——所以ClassB初始化时拿到的是还没赋值的空DataModel,打印自然为空。

修改方案

方案一:把DataModel改为引用类型(Class)

这是最直接的方案,因为Swift的class是引用类型,传递的是实例的引用,两个类会共享同一份数据:

// 把struct改成class
class DataModel { 
    var firstName: String = "" 
    var lastName: String = "" 
} 

class ClassA { 
    var dataModel: DataModel
    
    // 先初始化自己的dataModel,再创建ClassB
    init() {
        dataModel = DataModel()
        let classB = ClassB(dataModel: dataModel)
        dataModel.firstName = "ABC"
        // 此时ClassB的dataModel.firstName也会变成"ABC"
    }
} 

class ClassB { 
    var dataModel: DataModel 
    init(dataModel: DataModel) { 
        self.dataModel = dataModel 
        // 现在如果ClassA已经赋值,这里就能拿到对应的值;后续ClassA修改,这里也会同步
        print(dataModel.firstName)
    } 
}

方案二:如果坚持用Struct(SwiftUI场景)

如果你是在SwiftUI环境下,可以用@Binding或者ObservableObject来实现数据共享:

  • 用ObservableObject+@Published:
import Combine

class DataViewModel: ObservableObject {
    @Published var dataModel: DataModel = DataModel()
}

struct DataModel { 
    var firstName: String = "" 
    var lastName: String = "" 
}

class ClassA {
    let viewModel: DataViewModel
    
    init(viewModel: DataViewModel) {
        self.viewModel = viewModel
        let classB = ClassB(viewModel: viewModel)
        viewModel.dataModel.firstName = "ABC"
    }
}

class ClassB {
    let viewModel: DataViewModel
    
    init(viewModel: DataViewModel) {
        self.viewModel = viewModel
        print(viewModel.dataModel.firstName)
        // 后续ClassA修改viewModel.dataModel,ClassB也能通过监听Published事件获取变化
    }
}

验证效果

修改后,不管是ClassA还是ClassB修改dataModel的属性,另一个类里的对应属性都会同步更新,完全符合你“共享同一份可编辑数据”的需求。

内容的提问来源于stack exchange,提问作者wong john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:02:29