NSURLSession数据任务响应处理

时间:2017-03-01 16:50:05

标签: swift networking nsurlsession nsurlsessiondatatask

我目前正致力于实现一个网络模型,该模型使用NSURLSession类通过Swift中的HTTP与REST API进行通信。

为了准备请求,我使用以下代码:

A = numpy.random.rand(7, 3, 2)
b = numpy.random.rand(7, 3)
for k in range(7):
    x, res, rank, sigma = numpy.linalg.lstsq(A[k], b[k])
    print(x)

print

u, s, v = numpy.linalg.svd(A, full_matrices=False)
uTb = numpy.einsum('ijk,ij->ik', u, b)
xx = numpy.einsum('ijk, ij->ik', v, uTb / s)
print(xx)

现在,我正在发送请求:

    var request = URLRequest(url: requestURL) // url is "http://somethingsomething...
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = body

我的问题是我想检查响应的 session.dataTask(with: request) { data, response, error in // Parse the data, response and error }.resume() 以告知可能的错误,但是,完成块内的httpStatusCode类型为response,而不是URLResponse。这意味着我必须将HTTPURLResponse强制转换为response类型。到目前为止,我已经想到了两种方法来处理它 - 首先是添加另一个错误场景来处理“无法转换为HTTPURLResponse”场景,另一种方法是简单地强制转换为HTTPURLResponse。第一个选项似乎更好,但它可能只是添加一些无用的代码,因为演员可能总会成功?

所以基本上,我的问题是 - 我可以确定,如果我将请求发送到HTTP服务器,响应将始终为HTTPURLResponse类型?或者我是否必须实现处理HTTPURLResponse对象属于不同类型或为零的情况的代码?

另外,我认为最好在我的实现中提到如果完成块返回的错误不是nil,则流程将在尝试转换之前返回。

1 个答案:

答案 0 :(得分:0)

我相信这就是你所需要的。

session.dataTask(with: request) { data, response, error in
    // Parse the data, response and error
    if let httpResponse = response as? HTTPURLResponse {
        //here it is
        print(httpResponse.statusCode)
    }
}.resume()

我从来没有让演员不知情。我不确定为什么URLResponse和HTTPURLResponse没有合并到一个类中,但HTTPURLResponse是一个子类,根据我的知识,响应总是可以转换为。