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

时间:2018-12-28 00:52:22

标签: ios swift xcode networking local

我正在尝试通过本地网络向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添加为例外域:plist

我不确定我缺少什么。

1 个答案:

答案 0 :(得分:1)

根据Apple documentation

  

创建任务后,必须通过调用其resume()方法来启动它。

因此,您必须保留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()