Используя ленивый var и Xcode все еще говорит, что не может использовать экземпляр, инициализаторы свойств запускаются перед 'self'? - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать поле text, которое меняется на случайное с list при нажатии button. Все, что я действительно пытаюсь изменить, я background color, но затем я решил, что хочу вместо gradient. Он работал нормально, когда у меня было colors в backgrounds list, но теперь, когда я пытаюсь сделать gradient var, поэтому мне не нужно помещать каждый gradient в list, я продолжаю получать то же самое error. Я пытался делать это разными способами и, похоже, все равно не могу заставить его работать. Я чувствую, что должен быть способ.

    import SwiftUI




struct ContentView: View {

    lazy var drinkGradient = [LinearGradient(gradient: Gradient(colors: [Color("drinkcard1"), Color("drinkcard2")]), startPoint: .bottom, endPoint: .top)]
    lazy var truthGradient = [LinearGradient(gradient: Gradient(colors: [Color("truthcard"), Color("truthcard")]), startPoint: .bottom, endPoint: .top)]
    lazy var dareGradient = [LinearGradient(gradient: Gradient(colors: [Color("darecard"), Color("darecard")]), startPoint: .bottom, endPoint: .top)]

    @State private var backgrounds = [truthGradient[0], dareGradient[0], truthGradient[0], dareGradient[0], truthGradient[0], dareGradient[0], drinkGradient[0]]
    @State private var text = [String("Truth"), String("Dare"), String("Truth"), String("Dare"), String("Truth"), String("Dare"), String("Drink!!")]
    @State private var foregrounds = [Color.black, Color.white]
    @State private var number = [0]



    var body: some View {

        ZStack{

            //Background
            Rectangle()
                .foregroundColor(Color("background"))
                .edgesIgnoringSafeArea(.all)

            //All content
            VStack {

                //Banner
                HStack {

                    Text("Truth, Dare or Drink")
                        .font(.largeTitle)
                        .foregroundColor(.white)
                        .padding(.bottom, 30)
                        .padding(.top, 80)
                        .frame(minWidth: 0, maxWidth: .infinity)



                }
                .frame(minWidth: 0, maxWidth:  .infinity)
                .edgesIgnoringSafeArea(.all)
                .background(Color("banner"))
                .shadow(radius: 20)
                Spacer()

                Text(text[number[0]])
                .font(.title)
                .foregroundColor(foregrounds[0])
                .padding(.all, 75)
                .background(backgrounds[number[0]])
                .cornerRadius(15)
                .shadow(radius: 10)
                .padding(.all)

                Button(action: {
                    self.number[0] = Int.random(in:
                        0...self.text.count - 1)

                    if self.number[0] == 0{

                    }

                }) {
                    Text("Spin")
                        .font(.title)
                        .padding(.vertical, 15)
                        .padding(.horizontal, 80)
                        .foregroundColor(.black)
                        .background(Color("button"))
                        .cornerRadius(25)
                        .shadow(radius: 15)
                        .padding(.all)

                }
                Spacer()


            }.edgesIgnoringSafeArea(.all)



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

1 Ответ

2 голосов
/ 10 марта 2020

Одним из решений может быть использование переменных в классе следующим образом:

 class Colors {
    static var drinkGradient = [LinearGradient(gradient: Gradient(colors: [Color("drinkcard1"), Color("drinkcard2")]), startPoint: .bottom, endPoint: .top)]
    static var truthGradient = [LinearGradient(gradient: Gradient(colors: [Color("truthcard"), Color("truthcard")]), startPoint: .bottom, endPoint: .top)]
    static var dareGradient = [LinearGradient(gradient: Gradient(colors: [Color("darecard"), Color("darecard")]), startPoint: .bottom, endPoint: .top)]
 }

struct ContentView: View {

    @State private var backgrounds = [Colors.truthGradient[0], Colors.dareGradient[0], Colors.truthGradient[0], Colors.dareGradient[0], Colors.truthGradient[0], Colors.dareGradient[0], Colors.drinkGradient[0]]
    @State private var text = [String("Truth"), String("Dare"), String("Truth"), String("Dare"), String("Truth"), String("Dare"), String("Drink!!")]
    @State private var foregrounds = [Color.black, Color.white]
    @State private var number = [0]

    var body: some View {

        ZStack{

            //Background
            Rectangle()
                .foregroundColor(Color("background"))
                .edgesIgnoringSafeArea(.all)

            //All content
            VStack {

                //Banner
                HStack {

                    Text("Truth, Dare or Drink")
                        .font(.largeTitle)
                        .foregroundColor(.white)
                        .padding(.bottom, 30)
                        .padding(.top, 80)
                        .frame(minWidth: 0, maxWidth: .infinity)



                }
                .frame(minWidth: 0, maxWidth:  .infinity)
                .edgesIgnoringSafeArea(.all)
                .background(Color("banner"))
                .shadow(radius: 20)
                Spacer()

                Text(text[0])
                .font(.title)
                .foregroundColor(foregrounds[0])
                .padding(.all, 75)
                .background(backgrounds[0])
                .cornerRadius(15)
                .shadow(radius: 10)
                .padding(.all)

                Button(action: {
                    self.number[0] = Int.random(in:
                        0...self.text.count - 1)

                    if self.number[0] == 0{

                    }

                }) {
                    Text("Spin")
                        .font(.title)
                        .padding(.vertical, 15)
                        .padding(.horizontal, 80)
                        .foregroundColor(.black)
                        .background(Color("button"))
                        .cornerRadius(25)
                        .shadow(radius: 15)
                        .padding(.all)

                }
                Spacer()


            }.edgesIgnoringSafeArea(.all)



        }.edgesIgnoringSafeArea(.all)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...