我想讓http任務運行,設置全局定義的變量jwt。然後,只有當我想運行通過jwt的seque到我的下一個活動。Swift:如何確保在http任務完成之前seque不會運行?
我知道它們運行不正常,因爲打印語句失靈。捕獲是在底部。我編輯了實際的jwt,但黑盒子的位置是jwt字符串。
主視圖控制器
import UIKit
var jwt = ""
類的ViewController:UIViewController的{
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func submitLogin() {
let url = URL(string: "http://example.com")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options:.allowFragments) as? [String:Any] {
jwt = json["jwt"] as! String
print("Checkpoint 1 " + jwt)
}
} catch let err{
print(err.localizedDescription)
}
}
task.resume()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "loginSubmit" {
if let toViewController = segue.destination as? HomeActivity {
print("Checkpoint 2 " + jwt)
toViewController.token = jwt
}
}
}
}
第二視圖控制器
import UIKit
類HomeActivity:UIViewController的{
var token:String!
override func viewDidLoad() {
super.viewDidLoad()
renderInbox()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func renderInbox() {
print("Printing token" + token)
}
}
P.S我只一直在做的雨燕不到一個星期。所以任何一般的技巧或類似的東西都會受到歡迎。比如如何在不使用全局變量的情況下將jwt傳遞給seque。或者在輸出圖片中的檢查點1之後。
P.P.S對不起,代碼進出堆棧溢出代碼塊。如果你知道如何解決它,讓我知道,我會嘗試
現在你指出它很痛苦。非常感謝 –
@DavidRichards大多數編程問題都是。很高興它對你有效! – Robert