我正在尝试编写一个从Web上的服务中获取JSON的函数,但是其中一行(已注释)不断返回nil,我也不知道为什么。任何帮助表示赞赏! :) 谢谢!!

func parseJSON(long: CLLocationDegrees, lat: CLLocationDegrees) {

    var longitude : String = "\(long)"
    var latitude : String =  "\(lat)"

    longitude = longitude.substringToIndex(longitude.characters.indexOf(".")!)
    latitude = latitude.substringToIndex(latitude.characters.indexOf(".")!)

    print("\(latitude),\(longitude)")

    let appId = "xyz" //Insert API Key
    let urlString = "https://api.openweathermap.org/data/2.5/weather?lat=\(latitude)&lon=\(longitude)&units=metric&appid=\(appId)"

    let requestURL: NSURL = NSURL(string: urlString)!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

        //Keeps returning nil. No idea why.
        if let httpResponse = response as? NSHTTPURLResponse {

            print("Success!")
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {
                print("Everyone is fine, file downloaded successfully.")
            } else {
                print("STATUSCODE=\(statusCode)")
            }

        }
    }

    task.resume()

}

最佳答案

func dataTaskWithRequest(_ request: NSURLRequest,
       completionHandler completionHandler: (NSData?,
                                  NSURLResponse?,
                                  NSError?) -> Void) -> NSURLSessionDataTask


初始方法采用NSURLResponse。这是所请求URL的响应。 NSURLResponse可以是任何类型的响应。

NSHTTPURLResponseNSURLResponse的子类,仅当您确定Web服务使用HTTP协议对响应进行编码时,才可以将响应转换为NSHTTPURLResponse。否则,强制类型转换将始终返回nil

另外,我看到您正在使用的Web服务具有一些使用限制:


  如何获得准确的API响应
  
  1每10分钟从一个设备/一个API密钥发送的请求不要超过1次。通常天气不会改变,所以
  经常。
  
  2使用服务器的名称作为api.openweathermap.org。请不要
  使用服务器的IP地址。
  
  3通过城市ID而不是城市名称,城市坐标或邮政编码来调用API
  码。在这种情况下,您将获得针对您所在城市的精确响应。
  
  4免费帐户具有容量和数据可用性的限制。如果
  您没有收到服务器的回复,请不要尝试重复您的
  立即请求,但仅在10分钟后。我们也建议存储
  您以前的请求数据。


现在我在想,您的问题可能出在那儿。

关于ios - 为什么NSHTTPURLResponse返回nil? NSURLSession,Swift 2.2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37514408/

10-13 09:33