Сбой предварительного просмотра с SwiftUI @Binding: связь с приложением была прервана

Итак, у меня есть проект XCode, в котором есть 2 файла .swift, которые разделяют переменную через @Binding SwiftUI.

Проект легко компилируется и запускается через Симулятор.

Но всякий раз, когда я пытаюсь использовать предварительный просмотр для вторичного файла (который получает переменную из основного файла), он вылетает после успешной сборки, говоря: «MyProject.app разбился: связь с приложением была прервана».

Я все еще могу протестировать проект:

  1. Использование симулятора
  2. Предварительный просмотр основного файла (ContentView.swift) (Да, предварительный просмотр основного файла работает нормально)

Но это действительно отнимает много времени для создания и тестирования, поскольку в моем приложении требуется несколько действий, чтобы перейти к просмотру вторичного файла, и каждый раз, когда Xcode обновляет приложение, перезапускается.

Вот мой код для файла sondary:

import SwiftUI

struct Menu_Screen : View {
    @Binding var TapToBegin:Bool
    var body: some View {
        Button(action: {

        }) {
            Text("A Button").color(.white).frame(width: TapToBegin ? 50:0, height: TapToBegin ? 100:0).background(Color.blue).cornerRadius(10)
        }
    } }

#if DEBUG 
    struct Menu_Screen_Previews : PreviewProvider {
    @State static var BoolVariable = true
    static var previews: some View {
        Menu_Screen(TapToBegin: $BoolVariable)
    } }
#endif

Я хотел бы использовать предварительный просмотр со второстепенным файлом, чтобы всегда оставаться в его просмотре и экономить время. Любая помощь будет очень признательна.


person Nguyễn Khắc Hào    schedule 15.07.2019    source источник


Ответы (2)


Заменять

#if DEBUG 
    struct Menu_Screen_Previews : PreviewProvider {
    @State static var BoolVariable = true
    static var previews: some View {
        Menu_Screen(TapToBegin: $BoolVariable)
    } }
#endif

с участием

#if DEBUG 
    struct Menu_Screen_Previews : PreviewProvider {

    static var previews: some View {
        Menu_Screen(TapToBegin: .constant(true))
    } }
#endif
person Young40    schedule 24.07.2019
comment
Спасибо! Предыдущий ответ решил это для меня, но это тоже работает - person Nguyễn Khắc Hào; 26.07.2019

Другие ответы привели меня в правильном направлении, но не решили проблему для меня. Я получал ту же ошибку в Xcode, но привязка, которая мне нужна для отправки моего представления, была не просто логическим значением, а массивом структур. Я публикую свой рабочий код в надежде, что он поможет другим с этой ошибкой.

struct StudentsView_Previews: PreviewProvider {
    static let prevStudents: [Student] = [
         Student(id: UUID().uuidString, firstName: "John", lastName: "Doe"),
         Student(id: UUID().uuidString, firstName: "Jane", lastName: "Doe"),
         Student(id: UUID().uuidString, firstName: "Sam", lastName: "Smith")
    ]
    static let prevStudentsBinding = Binding.constant(prevStudents)
    static let prevClassTitle = "Math 100"

    static var previews: some View {
        StudentsView(students: prevStudentsBinding, classTitle: prevClassTitle)
    }
}

struct Students: View {
    @Binding var students: [Student]
    let classTitle: String

    var body: some View {
        List(students.indices) { idx in
            Text(self.students[idx].fullName())
        }       
    }.navigationBarTitle(classTitle)
}

struct Student : Identifiable {
    var id: String
    var firstName: String
    var lastName: String
    func fullName() -> String {
        return firstName + " " + lastName
    }
}
person snorris    schedule 09.10.2019