Почему сеанс URL не будет выполнен в том порядке, в котором он должен быть? - PullRequest
0 голосов
/ 28 марта 2020

Так что я всегда думал, что код будет выполняться сверху вниз. Например:

var1 = "one"
var2 = "two"
var3 = "three"

Все это работает, НО у меня есть другая переменная, «данные», которые необходимо заполнить. Вот функция для этого.

@objc func getData()
    {
        print("inside")
        let url: URL = URL(string: self.urlPath)!
        let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)

        let task = defaultSession.dataTask(with: url) { (data, response, error) in

            if error != nil {
                print("Error")
            }else {
                print("downloaded")
                self.downloadResult = String(data: data!, encoding: String.Encoding.utf8) as String!


                self.data = self.downloadResult
                    .components(separatedBy: "\n")
                    .map { $0.components(separatedBy: "\t") }
                self.header = self.data[0]
                self.data = Array(self.data.dropFirst())
                self.data = Array(self.data.dropLast())
            }

        }

        task.resume()
        //spreadsheetView.reloadData()
    }

Так что, если я хочу, чтобы это было сделано, я просто должен добавить его после моих других переменных, верно? Вот так:

var1 = "one"
var2 = "two"
var3 = "three"
getData()

Но нет, похоже, это не так. В частности, «задача» в getData () не будет выполнена, однако будет напечатан оператор print «inside». Может кто-нибудь объяснить, почему задача urlsession не будет выполняться?

После того, как все будет инициализировано, только тогда полная функция getData будет работать в полном объеме. Но мне нужно заполнить переменную данных раньше. Я не понимаю Любое понимание будет с благодарностью. Я использую Swift 4 на Xcode9.2. Спасибо!

...