运行时错误:前提条件失败:属性未能设置初始值

Rum*_*les 12 swiftui navigationlink

我有一个BugSplitView单独工作正常但会导致

先决条件失败:属性未能设置初始值

在预览或模拟器中导航到时出错。

该视图具有由水平按钮栏分隔的上部 (Color) 和下部 (Color),并使用 GeometeryReader 和split状态进行布局。当它是 NavigationButton 的目的地时,它不会在预览中正确显示并在模拟器中运行时报告上面的断言。删除它BugButtonBar,它的工作原理。把我难住了!帮助。

import SwiftUI

struct BugSplitView: View {
    @State var split : CGFloat = 0.75
    var buttons : [BugButtonBar.Info]{
        [BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
    }
    var body: some View {
        GeometryReader{ g in
            VStack(spacing: 0){
                Color.gray
                    .frame(width: g.size.width, height: (g.size.height) * self.split)
                VStack{
                    BugButtonBar(infos: self.buttons)
                    Color(white: 0.3)
                }
                    .frame(height: (g.size.height) * (1 - self.split))
            }
        }.edgesIgnoringSafeArea(.all)
    }
}


struct BugButtonBar : View{

    struct Info : Identifiable {
        var id = UUID()
        var title : String
        var imageName : String
        var action: () -> Void
    }

    var infos : [Info]
    func color() -> Color{
        Color.black
    }
    var body: some View {
        HStack(){
            Spacer()
            ForEach(self.infos){ info in
                Button(action: info.action){
                    Text(info.title)
                }
                Spacer()
            }
        }
    }
}


struct ShowBugView : View{
    var body : some View{
        NavigationView {
            NavigationLink(destination: BugSplitView()){
                Text("Show Bug")
            }
        }
    }
}


struct BugSplitView_Previews: PreviewProvider {
    static var previews: some View {
        Group{
            BugSplitView()
            ShowBugView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

LuL*_*aGa 6

问题是您的按钮被声明为计算属性。为了解决崩溃问题,请像这样声明它们:

var buttons = [BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
Run Code Online (Sandbox Code Playgroud)

  • @LuLuGaGa你能解释一下为什么这是一个解决方案吗? (3认同)