Использование XCode-8.2.1, Swift-3.0.2 и iOS-10.2.1,
Я пытаюсь вызвать две разные страницы URLSession.shared.dataTasks(первый - простой URL-запрос, а второй - POST-запрос).
Так как мой первый DataTask предоставляет результат, который необходим в httpBody второй DataTask, две страницы URLSession.shared.dataTask будут запускаться последовательно, один за другим! (а также подготовительный код должен выполняться последовательно).
Я пытался использовать до сих пор две очереди serialQueue.sync{}. Но я должен был понять, что код не работает в том порядке, в котором я хотел бы.
Оператор печати в журнале выглядит следующим образом:
Hmmmmmm 2
Hmmmmmm 1
Hmmmmmm 3
(вместо 1, 2, 3 при необходимости)!
Как вы можете получить заказ 1, 2, 3??
(т.е. как вы можете убедиться, что httpBody второй DataTask может быть заполнен результатом, полученным из первой DataTask?)
Вот мой код: (не выполнимый как URL-адрес был вынут, но вы получите точку)!
import UIKit
class ViewController: UIViewController {
    let serialQueue = DispatchQueue(label: "myResourceQueue")
    var stationID: Int = 0
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.serialQueue.sync {
            let myResourceURL = URL(string: "myQueryString1")
            let task = URLSession.shared.dataTask(with: myResourceURL!) { (data, response, error) in
                if (error != nil) {
                    // print(error.debugDescription)
                } else {
                    if let myData = data {
                        do {
                            let myJson = try JSONSerialization.jsonObject(with: myData, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                            // print(myJson)
                            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                            print("Hmmmmmm 1")
                            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        } catch {
                            // error
                        }
                    }
                }
            }
            task.resume()
        }
        self.serialQueue.sync {
            var request = URLRequest(url: URL(string: "myQueryString2")!)
            request.httpMethod = "POST"
            request.addValue("API_id", forHTTPHeaderField: "Authorization")
            request.addValue("application/xml", forHTTPHeaderField: "Content-Type")
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            print("Hmmmmmm 2")
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            let postString: String = "My_XML_POST_Body"
            request.httpBody = postString.data(using: .utf8)
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
                // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                print("Hmmmmmm 3")
                // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            }
            task.resume()
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
Любая помощь оценивается!