swift4で非同期処理の終了を待とうとすると処理が止まってしまいます。
具体的には以下のコードで
1 2
と出力されて欲しいのですが、 semaphore.wait() の行で止まってしまい、
dataTask関数のコールバックが呼ばれません。
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 let semaphore = DispatchSemaphore(value: 0) 9 let stringUrl = "https://www.google.com" 10 let url = URL(string: stringUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)! 11 let req = URLRequest(url: url) 12 let task = URLSession.shared.dataTask(with: req) { (data, res, err) in 13 print("1") 14 semaphore.signal() 15 } 16 semaphore.wait() 17 print("2") 18 task.resume() 19 } 20 21 22} 23 24
Sigle View Applicationを作成した状態からデフォルトで作成されるViewController.swift(上記コード)を編集した以外はどこも変更していません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/22 00:16