Я создал этот сценарий входа.
После успешного размещения данных он декодирует полученный объект 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)
}
}
}
}