mvvm - 将 @ObservableObject 传递给嵌套 View

标签 mvvm swiftui observedobject

我对 SwiftUI 很陌生,并试图将 forEach 循环中的数组传递给另一个 View ,但 Xcode 说,我的“属性类型与其包装器类型”ObservedObject 的“wrappedValue”属性不匹配'.我在这里也发现了一些类似的问题,但那里的解决方案对我没有任何帮助。

当我直接在 forEach 循环中使用该对象时,一切都按需要工作。但是,我想在循环内实现的 View 将非常复杂,因此将它传递给新结构的解决方案会很棒。

如果有人能向我解释为什么这段代码不起作用以及我需要做些什么来修复它,我将不胜感激。

import SwiftUI
import Combine

struct Collectable: Identifiable, Decodable {
    let id: Int
    let name: String
    let completion: Int
}

class AlbumViewModel: ObservableObject {

    @Published var album: [Collectable] = [
        .init(id: 1, name: "Album 1", completion: Int.random(in: 0...100)),
        .init(id: 2, name: "Album 2", completion: Int.random(in: 0...100)),
        .init(id: 3, name: "Album 3", completion: Int.random(in: 0...100)),
        .init(id: 4, name: "Album 4", completion: Int.random(in: 0...100)),
    ]

}

struct Albums: View {

    @ObservedObject var albumsVM = AlbumViewModel()

    var body: some View {
        VStack(spacing: 10) {
            ForEach(albumsVM.album) { collectable in
                AlbumCell(myAlbum: collectable)
            }
        }
    }

}

struct AlbumCell: View {

    @ObservedObject var myAlbum: Collectable   /* ERROR HERE */

    var body: some View {
        VStack {
            Text(myAlbum.name)
        }
    }

}

最佳答案

我想你想要这样:

struct AlbumCell: View {

    var myAlbum: Collectable

    var body: some View {
        VStack {
            Text(myAlbum.name)
        }
    }
}

关于mvvm - 将 @ObservableObject 传递给嵌套 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62016742/

相关文章:

c# - 在 ViewModel 中具有静态 DbContext 的 WPF 应用程序

c# - 如何在 xaml 中的复选框对象上禁用破折号 + 等号?

c# - WPF 将 UI 事件绑定(bind)到 ViewModel 中的命令

ios - 使用 ObservableObject 时 View 不会更新

ios - SwiftUI:执行函数时如何从观察到的对象中捕获变化的值

swiftui - @State 和 @ObservedObject 有什么区别,它们都可以用来持久化状态吗?

Swift Observe 动态字典

android - 数据绑定(bind)和 MVVM。通过单击按钮显示 DatePickerDIalog

ios - 在swiftUI中调整VStack的框架大小

ios - 在 SwiftUI 中修改文本