Ошибка времени выполнения: ошибка предварительного условия: атрибут не смог установить начальное значение - PullRequest
1 голос
/ 26 октября 2019

У меня есть представление BugSplitView, которое работает само по себе, но вызывает ошибку

предусловия: атрибут не смог установить начальное значение

при переходе вили превью или симулятор.

Вид имеет верхнюю часть (Цвет) и нижнюю часть (Цвет), разделенные горизонтальной панелью кнопок и расположенные с использованием 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()
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

Оказывается, свойство id структуры Info было проблемой. Изменил его на вычисляемое свойство следующим образом:

var id : String {
   title + imageName
}

Отличный пример того, почему я люблю / ненавижу SwiftUI.

0 голосов
/ 26 октября 2019

Проблема в том, что ваши кнопки объявлены как вычисляемое свойство. Чтобы решить проблему, объявите их так:

var buttons = [BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
...