3

我试图在天气应用程序中解析 json,但遇到了我无法克服的障碍。

我在下面的代码中确实收到了一个错误,“类型'int'不符合协议'StringLiteralConvertible'”。我尝试过强制转换 jsonResult["main"] ,但这确实给出了错误“后缀的操作数应该具有可选类型,类型是 AnyObject”。我是否需要以某种方式向下转换数组,如果需要,我应该怎么做?我为此搜索了很多,但在其他帖子中找不到任何帮助。代码如下。

func updateWeatherInfo(latitude: CLLocationDegrees, longitude: CLLocationDegrees) {
    Alamofire.request(.GET, AlongRequest)
        .responseJSON { (_, _, JSON, error) in
            println(JSON)
            self.updateUISuccess(JSON as NSArray!)
    }
}

func updateUISuccess(jsonResult: NSArray) {
    self.loading.text = nil
    self.loadingIndicator.hidden = true
    self.loadingIndicator.stopAnimating()

    if let tempResult = ((jsonResult["main"] as NSArray)["temp"] as? Double)
4

1 回答 1

0

如果您提供您尝试解析的 JSON,这将更容易给出明确的答案,但您收到的错误消息很清楚。

该错误是因为您尝试使用字符串下标访问您声明为NSArray实例的内容,在这一行中两次:

if let tempResult = ((jsonResult["main"] as NSArray)["temp"] as? Double)

jsonResult被声明为NSArray参数,然后在jsonResult["main"]尝试NSArray使用["temp"]. 这里的问题是NSArray(和内置的 Swift 数组)只使用基于整数的下标。错误是说 Swift 编译器期望一个Int,你已经提供了一个字符串文字。

要解决此问题,您需要朝两个方向之一前进。如果您尝试访问的结构实际上具有这些字符串键,那么您应该在这两种情况下都使用NSDictionary而不是NSArray。如果不是,它是一个整数索引数组,你应该使用整数。

于 2014-10-12T01:30:51.610 回答