MVVM 并将可选值传递给 viewModel

Posted

技术标签:

【中文标题】MVVM 并将可选值传递给 viewModel【英文标题】:MVVM and passing over optinal value to the viewModel 【发布时间】:2021-08-10 06:25:04 【问题描述】:

我正在尝试使用 MVVM 方法来为我的 swiftui 应用程序工作,但我遇到了一个问题,即可选变量似乎没有被正确传递。

因此,您可以在主视图中单击“新建”或“编辑”,在编辑时我想将值传递过来,此屏幕的代码: 按钮:

Button 
        selectedTag = tag
        isShowingEdit.toggle()
 label: 
         Image(systemName: "pencil")
         .font(Font.system(size: 30, weight: .bold))
         .foregroundColor(.gray)

导航链接:

  NavigationLink(destination: TagsCreatingView(viewModel: TagCreateViewModel(tag: selectedTag)), isActive: $isShowingEdit)  EmptyView() 

TagCreateViewModel 初始化如下所示:

  init(tag: TagMO?) 

    if let tag = tag 
    self.tag = tag
        title = tag.title
        selectedColor = Int(tag.color)
    

如果我在单击按钮时在 selectedTag 上进行打印,则它具有正确的值,但在 viewModel 上它将为零。此外,如果我单击编辑按钮两次,它按计划工作并且标签不是零(两次我的意思是单击编辑,在另一个屏幕上单击取消然后再次编辑..)

【问题讨论】:

【参考方案1】:

问题是目标视图内部有

@StateObject var viewModel: TagCreateViewModel

将其更改为 @ObservedObject var viewModel: TagCreateViewModel

在所有权正确后解决了这个问题:9

【讨论】:

以上是关于MVVM 并将可选值传递给 viewModel的主要内容,如果未能解决你的问题,请参考以下文章

“致命错误:在展开可选值时意外发现 nil”,同时调用协议方法

向后传递数据时,在展开可选值时意外发现 nil

如何在spring EL中将null作为可选值传递?

IOS Swift 致命错误:在展开可选值时意外发现 nil

tableview reloadData在解包可选值时崩溃意外发现的nil

在展开可选值 (UIButton) 时意外发现 nil