从API获得200 OK响应代码后,我试图选择一个全新的视图。响应代码成功发送回应用程序,并打印到控制台中并加载视图。当视图加载到前一个视图的顶部时除外。 Photo of what I'm talking about。我无法使用导航按钮,因为您无法使用它们的瓶坯功能,并且我也不想在登录后在屏幕的左上方单击“后退”按钮。这是我现在拥有的代码;
@State var username: String = ""
@State var password: String = ""
@State var sayHello = false
@State private var showingAreaView = false
@State private var showingAlert = false
@State private var alertTitle = ""
@State private var alertMessage = ""
Button(action: {
self.login()
})//end of login function
{
Image("StartNow 3").resizable()
.scaledToFit()
.padding()
}
if showingAreaView == true {
AreaView()
.animation(.easeIn)
}
//actual Login func
func login(){
let login = self.username
let passwordstring = self.password
guard let url = URL(string: "http://localhost:8000/account/auth/") else {return}
let headers = [
"Content-Type": "application/x-www-form-urlencoded","cache-control": "no-cache","Postman-Token": "89a81b3d-d5f3-4f82-8b7f-47edc39bb201"
]
let postData = NSMutableData(data: "username=\(login)".data(using: String.Encoding.utf8)!)
postData.append("&password=\(passwordstring)".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8000/account/auth/")! as URL,cachePolicy:.useProtocolCachePolicy,timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest,completionHandler: { (data,response,error) in
if let httpResponse = response as? HTTPURLResponse {
guard let data = data else {return}
print(data)
if httpResponse.statusCode == 200{
DispatchQueue.main.async {
//Segue to new view goes here
print(httpResponse.statusCode)
self.showingAreaView = true
}
}else{
if httpResponse.statusCode == 400{
DispatchQueue.main.async {
self.alertTitle = "Oops"
self.alertMessage = "username or Password Incorrect"
self.showingAlert = true
print(httpResponse.statusCode)
}
}else{
DispatchQueue.main.async {
self.alertTitle = "Well Damn"
self.alertMessage = "Ay chief we have no idea what just happened but it didn't work"
self.showingAlert = true
}
}
}
do{
let JSONFromServer = try JSONSerialization.jsonObject(with: data,options: [])
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromsnakeCase
let tokenArray = try decoder.decode(token.self,from: data)
print(tokenArray.token)
UserDefaults.standard.set(tokenArray.token,forKey: "savedToken")
let savedToken = UserDefaults.standard.object(forKey: "savedToken")
print(savedToken)
}catch{
if httpResponse.statusCode == 400{
self.alertTitle = "Oops"
self.alertMessage = "username or Password Incorrect"
self.showingAlert = true
}
print(error)
print(httpResponse.statusCode)
}
} else if let error = error {
self.alertTitle = "Well Damn"
self.alertMessage = "Ay chief we have no idea what just happened but it didn't work"
self.showingAlert = true
print(error)
}
})
dataTask.resume()
}
我已经厌倦了用谷歌搜索这个问题,但是没有任何运气。我所需要的只是一个基本视图,无需导航按钮。
感谢您的帮助!