Передача @ObservableObject во вложенное представление - PullRequest
1 голос
/ 26 мая 2020

Я новичок в SwiftUI и пытаюсь передать массив из forEach-l oop в другое представление, но Xcode говорит, что мой тип свойства не совпадает с типом свойства wrappedValue его оболочки. введите ObservedObject. Я также нашел здесь несколько похожих вопросов, но ни одно из решений там мне не помогло.

Когда я использую объект непосредственно в forEach-l oop, все работает как нужно. Однако представление, которое я хочу реализовать внутри l oop, будет довольно сложным, поэтому было бы здорово передать его в новую структуру.

Я был бы очень благодарен, если бы кто-нибудь мог мне объяснить, почему этот код не работает и что мне нужно сделать, чтобы это исправить.

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 голосов
/ 26 мая 2020

Думаю, вы хотите вот так:

struct AlbumCell: View {

    var myAlbum: Collectable

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