将@ObservableObject传递到嵌套视图

时间:2020-05-26 07:27:30

标签: mvvm swiftui observedobject

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

当我直接在forEach循环中使用对象时,一切都按需要工作。但是,我要在循环内实现的视图将非常复杂,因此将其传递给新结构的解决方案将是一个很好的选择。

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

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)
        }
    }

}

1 个答案:

答案 0 :(得分:0)

我想你想要这样:

struct AlbumCell: View {

    var myAlbum: Collectable

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