Переменная SwiftUI Json - PullRequest
       7

Переменная SwiftUI Json

0 голосов
/ 02 февраля 2020

Я создал этот сценарий входа.

После успешного размещения данных он декодирует полученный объект JSON.

Затем он печатает его с помощью функции:

print ("Имя данных ответа: \ n (users.Name)")

Я хочу, чтобы значение (users.Name) быть доступным в home : просмотр?

Не могли бы вы помочь мне с этим?

Спасибо

import SwiftUI



struct User: Codable {
    let Name: String
}

struct ContentView: View {

    @State var signedIn: Bool = false


    var body: some View {




        Group {
            if (signedIn) {
                HomeView()
            } else {
                Login(signedIn: $signedIn)
            }
        }

    }
}


struct HomeView: View {
    var body: some View {

        TabView{
            home().tabItem {
                Image(systemName: "house.fill").font(.title)
            }
            Text("Neuer Urlaubsantrag").tabItem {
                Image(systemName: "pencil").font(.title)
            }
            Text("Verlauf").tabItem {
                Image(systemName: "clock").font(.title)
            }
            Text("Einstellungen").tabItem {
                Image(systemName: "gear").font(.title)
            }
        }

    }
}


struct home : View {



    var body : some View{


        VStack{

            HStack{

                Text("You are at Home").foregroundColor(.gray)


            }

        }

    }

}


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



struct Login : View {


    @State var user = ""
    @State var pass = ""
    @Binding var signedIn: Bool

    var body : some View {

        VStack{


                Text("Logo")
                Image("logo")
                    .resizable()
                    .frame(width: 100, height: 100)

                Text("Sign In").fontWeight(.heavy).font(.largeTitle).foregroundColor(Color.blue).padding([.top,.bottom], 20)

                VStack(alignment: .leading){

                    VStack(alignment: .leading){

                        Text("Username").font(.headline).fontWeight(.light)

                        HStack{

                            TextField("Enter Your Username", text: $user)
                        }

                        Divider()
                    }

                    VStack(alignment: .leading){

                        Text("Password").font(.headline).fontWeight(.light)


                        SecureField("Enter Your Password", text: $pass)

                        Divider()
                    }
                }.padding(.horizontal, 6)

                VStack{



                    Button(action: {

                        let url = URL(string: "http://192.168.178.26/iso/loginserv.php")
                        guard let requestUrl = url else { fatalError() }

                        var request = URLRequest(url: requestUrl)
                        request.httpMethod = "POST"

                        let postString = "user=\(self.user)&pass=\(self.pass)";

                        request.httpBody = postString.data(using: String.Encoding.utf8);

                        let task = URLSession.shared.dataTask(with: request) {
                            (data, response, error) in

                            if let error = error {
                                print("Error took place \(error)")
                                return
                            }

                            guard let data = data else {return}

                            do{
                                let users = try JSONDecoder().decode(User.self, from: data)
                                print("Response data Name: \n \(users.Name)")



                                if !(data.isEmpty) {
                                    self.signedIn = true
                                }

                            }catch let jsonErr{
                                print(jsonErr)
                            }

                        }


                        task.resume()

                    }) {
                        Text("Sign In").foregroundColor(.white).frame(width: UIScreen.main.bounds.width - 120).padding()

                    }.background(Color.green)
                        .clipShape(Capsule())
                        .padding(.top, 45)
                }
            }
        }
    }

...