所以我有一个XCode项目,其中有2个.swift文件,这些文件通过SwiftUI的@Binding共享一个变量。
该项目可以很好地构建并运行在模拟器中。
但是,每当我尝试在辅助文件(从主文件接收变量)上使用“预览”时,成功构建并显示“ MyProject.app崩溃:与应用程序的通信被中断”后,崩溃。
我仍然可以通过以下方式测试项目:
但是,由于它在我的应用程序中需要执行多个操作才能到达辅助文件的视图,并且每次Xcode刷新应用程序时,它都会花费大量时间进行构建和测试。
这是我的声音文件代码:
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
我想对其他文件使用“预览”,这样我就可以始终停留在其视图上并节省时间。任何帮助将不胜感激。
答案 0 :(得分:1)
其他答案将我引向正确的方向,但并没有为我解决问题。我在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
}
}
答案 1 :(得分:0)
#if DEBUG
struct Menu_Screen_Previews : PreviewProvider {
static var BoolVariable = true
static let BoolVariableBinding = Binding(getValue: { BoolVariable },
setValue: { BoolVariable = $0 })
static var previews: some View {
Menu_Screen(TapToBegin: BoolVariableBinding)
}
}
#endif
答案 2 :(得分:0)
替换
#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