首页 > 解决方案 > 为什么 URL 会话不会按应有的顺序执行?

问题描述

所以我一直认为代码会从上到下执行。例如:

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() 中的“任务”将不会执行——但打印“内部”语句将打印。有人可以解释为什么 urlsession 任务不会执行吗?

在一切都初始化之后,只有这样完整的 getData 函数才能完整地工作。但我需要之前填充我的数据变量。我不明白。任何见解将不胜感激。我在 Xcode9.2 上使用 Swift 4。谢谢!

标签: swiftxcodeswift4xcode9.2

解决方案


推荐阅读