Swiftui 从ObservieObject中删除对象
两个Swiftui 从ObservieObject中删除对象,swiftui,combine,observableobject,Swiftui,Combine,Observableobject,两个视图模型,一个是包含技能的角色的存储: final class RolesStore: ObservableObject { @Published var roles: [Role] = [] ..... final class SkillStore: ObservableObject { @Published var skills: [Skill] = [] ..... 榜样是: struct Role: Codable, Identifiable { let id
视图模型
,一个是包含技能的角色的存储:
final class RolesStore: ObservableObject {
@Published var roles: [Role] = []
.....
final class SkillStore: ObservableObject {
@Published var skills: [Skill] = []
.....
榜样是:
struct Role: Codable, Identifiable {
let id: String
var name: String
var skills: [Skill]
}
另一个ViewModel
是技能库
:
final class RolesStore: ObservableObject {
@Published var roles: [Role] = []
.....
final class SkillStore: ObservableObject {
@Published var skills: [Skill] = []
.....
下面显示了我想做的事情,从SkillStore
(handy)中删除一项技能,并将删除的技能自动从任何角色中删除,该角色恰好在角色存储中拥有该技能
import SwiftUI
import PlaygroundSupport
var skillStore = SkillStore(skills: MySkills.skills())
var roleStore = RoleStore(roles: MyRoles.roles(), skillStore: skillStore)
struct ModelsView: View {
@ObservedObject var skillStore: SkillStore
@ObservedObject var roleStore: RoleStore
....
如您所见,删除技能handy
不会将其从角色Ansatt
中删除。
我不知道如何做到这一点,所以我准备了一个任何人都可以从Github克隆的Xcode游乐场:
必须有一种方法让SkillStore
依赖于SkillStore
中的技能,或者除了循环所有角色并从所有具有此技能的角色中删除技能之外,没有其他方法了吗?我找到了一个解决方案,当我想起一个类可以通过Combine
的魔力订阅另一个类中的更改时。因此,如果我可以让RoleStore
类订阅SkillStore
中的更改,那么RoleStore
可以在用户删除技能时更新并删除其角色中的技能
为此,RolesStore
需要引用SkillStore
:
import SwiftUI
import PlaygroundSupport
var skillStore = SkillStore(skills: MySkills.skills())
var roleStore = RoleStore(roles: MyRoles.roles(), skillStore: skillStore)
struct ModelsView: View {
@ObservedObject var skillStore: SkillStore
@ObservedObject var roleStore: RoleStore
....
SkillStore
使用将发送删除的技能的PassthroughSubject
更新(deletedPublisher
):
我已经用这些变化更新了操场