httpタスクを実行して、グローバルに定義された変数jwtを設定します。その後、私は次の活動にjwtを渡すsequeを実行したいですか?Swift:httpタスクが完了する前にsequeが実行されないようにするにはどうすればよいですか?
printステートメントの順序が間違っているため、順序が間違っていることが分かりました。キャプチャが一番下にあります。私は実際の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
}
}
}
}
第2のビューコントローラ
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