使用 URLSession 的本地网络 - Swift 4.2,Xcode 10.1

Local networking using URLSession - Swift 4.2, Xcode 10.1

我正在尝试通过本地网络向 IP 地址发出 HTTP 请求。但是,当我调用 dataTask 时,它实际上并没有发出请求。对互联网的请求工作正常。我还尝试从 HTTPBot 发出请求并且成功了。

调用代码如下:

    let url = apiBaseUrl + "get_serial"
    let urlObj = URL(string: url)
    var urlRequest = URLRequest(url: urlObj!)

    urlRequest.httpMethod = "GET"
    urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData

    URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
            guard let data = data else { return }

            let serial = (String(data: data, encoding: .utf8))

            onSuccess(serial ?? "")
        }

url 正确定义为 http://192.168.0.50/get_serial

我试图单步执行它,但在它达到 URLSession.shared.dataTask 之后它没有做任何其他事情。我怀疑线程问题并尝试添加延迟,以及尝试从全局线程分派 dataTask,但都没有用。我还尝试在我的 .plist 文件中允许任意加载并将该 IP 添加为异常域:

我不确定我错过了什么。

根据 Apple documentation:

After you create the task, you must start it by calling its resume() method.

因此您必须保留 URLSession.shared.dataTask 实例并使用 resume 方法启动它。类似于以下内容。

let url = apiBaseUrl + "get_serial"
let urlObj = URL(string: url)
var urlRequest = URLRequest(url: urlObj!)

urlRequest.httpMethod = "GET"
urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData

let task = URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
        guard let data = data else { return }

        let serial = (String(data: data, encoding: .utf8))

        onSuccess(serial ?? "")
    }

task.resume()