Int不符合协议'StringLiteralConvertible'

时间:2014-10-11 21:17:23

标签: json swift nsarray alamofire

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

我确实收到错误,“Type'int'不符合以下代码中的Protocol'StringLiteralConvertible'”。 香港专业教育学院尝试过铸造jsonResult [“main”],但确实给出了错误“postfix的操作数应具有可选类型,类型为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)

1 个答案:

答案 0 :(得分: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。如果没有,它是一个整数索引数组,你应该使用整数。