SwiftUI: Как изменить ContentView @State верхнего уровня во время предварительного просмотра? - PullRequest
2 голосов
/ 01 февраля 2020

У меня есть представление содержимого MacOS SwiftUI верхнего уровня, где я обычно инициализирую @State для моего массива [Frame] в пустой массив []. Но при предварительном просмотре я хотел бы иметь образец Frame.

Вот минимальный код: (Frame - это моя собственная структура, Frame.sampleFrame - stati c frame для предварительного просмотра).

struct ContentView: View {
    @State var frames: [Frame] = []

    var body: some View {
        VStack {
            FrameSummaryView(frames: self.$frames)
            Text("Placeholder")
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

и вот как я создаю постоянный массив из 1 элемента [Frame.sampleFrame] в моем FrameSummaryView, если я предварительно просмотрю это:

struct FrameSummaryView_Previews: PreviewProvider {
    static var previews: some View {
        FrameSummaryView(frames: .constant([Frame.sampleFrame]))
    }
}

Как сделать так, чтобы мой топ Уровень ContentView использует массив .constant ([Frame.sampleFrame]) [Frame] в режиме предварительного просмотра?

1 Ответ

1 голос
/ 01 февраля 2020

Здесь возможен подход

struct ContentView: View {
    @State var frames: [Frame]

    init(_ frames: [Frame] = []) {
        _frames = State<[Frame]>(initialValue: frames)
    }

    var body: some View {
        VStack {
            FrameSummaryView(frames: self.$frames)
            Text("Placeholder")
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView([Frame.sampleFrame])
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...