Swift NSString到预期参数NSData

Swift NSString到预期参数NSData,swift,nsdata,nsjsonserialization,Swift,Nsdata,Nsjsonserialization,我有以下代码: let urls : String = Baseurl+"lat="+latitude+"&lon="+longitude+"&APPID="+apiKey if let url = NSURL(string: urls) { do { let jsonResult = try NSString(contentsOfURL: url, usedEncoding: nil)

我有以下代码:

 let urls : String = Baseurl+"lat="+latitude+"&lon="+longitude+"&APPID="+apiKey

        if let url = NSURL(string: urls) {
            do {
                let jsonResult = try NSString(contentsOfURL: url, usedEncoding: nil)

                do {
                    if let jsonRes = try NSJSONSerialization.JSONObjectWithData(jsonResult, options: []) as? NSDictionary {
                        print(jsonRes)
                    }
                } catch let error as NSError {
                    print(error.localizedDescription)
                }
但是这行有一个错误:
如果让jsonRes=try…
。错误是:
无法将“NSString”类型的值转换为预期的参数类型“NSData”

当我打印jsonResult时,我得到以下结果:

{

    "coord":{
        "lon":-0.13,
        "lat":51.51
    },
    "weather":[
        {
            "id":501,
            "main":"Rain",
            "description":"moderate rain",
            "icon":"10d"
        }
    ],
    "base":"stations",
    "main":{
        "temp":284.46,
        "pressure":1023,
        "humidity":76,
        "temp_min":283.15,
        "temp_max":285.15
    },
    "visibility":10000,
    "wind":{
        "speed":7.7,
        "deg":220
    },
    "clouds":{
        "all":75
    },
    "dt":1449755400,
    "sys":{
        "type":1,
        "id":5093,
        "message":0.0414,
        "country":"GB",
        "sunrise":1449734113,
        "sunset":1449762690
    },
    "id":2643743,
    "name":"London",
    "cod":200

}

如何访问这些值?

需要一个
NSData
对象,而不是
字符串

替换

let jsonResult = try NSString(contentsOfURL: url, usedEncoding: nil)

并删除该尝试

我还应该注意,这并不是发出web请求的最佳方式,您应该使用
NSURLSession
发出异步请求:

NSURLSession().dataTaskWithURL(NSURL(string: urls)!) { (data, response, error) -> Void in
    if let data = data {
        do {
            let dict = try NSJSONSerialization.JSONObjectWithData(data, options: [])
            print(dict)
        } catch {
            print(error)
        }
    }
}.resume()

NSJSONSerialization.JSONObjectWithData()
需要一个
NSData
对象,而不是
字符串

替换

let jsonResult = try NSString(contentsOfURL: url, usedEncoding: nil)

并删除该尝试

我还应该注意,这并不是发出web请求的最佳方式,您应该使用
NSURLSession
发出异步请求:

NSURLSession().dataTaskWithURL(NSURL(string: urls)!) { (data, response, error) -> Void in
    if let data = data {
        do {
            let dict = try NSJSONSerialization.JSONObjectWithData(data, options: [])
            print(dict)
        } catch {
            print(error)
        }
    }
}.resume()

请使用
if-let-data=data{
而不是
if(data!=nil){
,这样您就可以避免强制展开数据。对于其他人来说,这是一个更好的示例(您的代码可以工作,但不必要强制展开)。修改后的代码更“快速”这只是我设置的一个快速示例。很酷,很抱歉挑三拣四,但是初学者可以从这里的示例中学习,并且额外的字符很少。我认为在
if let
之后使用双开口大括号会出现键入/复制和粘贴错误。您能检查吗?修复了括号键入错误。如果let data=data,请使用
{
而不是
if(data!=nil){
这样可以避免强制展开数据。更好的示例适用于其他人(您的代码可以工作,但不需要强制展开)。修改后的代码更“快速”这只是我设置的一个快速示例。很酷,很抱歉挑三拣四,但是初学者可以从这里的示例中学习,额外的字符很少。我认为在
if let
之后使用双开口大括号时存在键入/复制和粘贴错误。您可以检查吗?修复了括号中的键入错误。