抛出类型'(NSData!,NSError!)抛出函数的转换无效 - > ()'到非投掷函数类型'(NSData!,NSError!) - >虚空'

时间:2016-04-25 22:22:36

标签: swift swift2 nsjsonserialization

我试图在行if let jsonData Array = try NSJSONSerialization...中将Swift 1转换为2,因为它最初是在"额外参数'错误'在电话"所以我添加了"尝试"在NSJSONSerialization之前,但现在它说#34;投掷'(NSData!, NSError!) throws -> ()' to non-throwing function type '(NSData!, NSError!) -> Void'类型函数的转换无效。我认为错误没有得到妥善处理,但我不知道如何做到这一点。这是代码

httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!) in
        if error != nil {
            let errorMessage = self.httpHelper.getErrorMessage(error)
            let errorAlert = UIAlertView(title:"Error", message:errorMessage as String, delegate:nil, cancelButtonTitle:"Ok")
            errorAlert.show()

            return
        }

        var error: NSError?

        // let jsonDataDict = try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &error) as! NSDictionary
        //  let jsonDataDict = try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0)) as! NSDictionary

        if let jsonDataArray = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0)) as? NSArray! {
            //load collection view with selfies
            if jsonDataArray != nil {
                for imageDataDict in jsonDataArray {
                    var selfieImgObj = SelfieImage()

                    selfieImgObj.imageTitle = imageDataDict.valueForKey("title") as! String
                    selfieImgObj.imageId = imageDataDict.valueForKey("random_id") as! String
                    selfieImgObj.imageThumbnailURL = imageDataDict.valueForKey("image_url") as! String

                    self.dataArray.append(selfieImgObj)
                }

                self.collectionView?.reloadData()
            }
        }
      })
    }

1 个答案:

答案 0 :(得分:0)

首先,您应该在throws循环中包装任何调用do-try-catch的函数。其次,安全地将jsonArray打开为Swift数组而不是强制将其强制转换为NSArray

do {
    if let jsonArray = try NSJSONSerialization.JSONObjectWithData(NSData(), options: .AllowFragments) as? [AnyObject] {
        // unarchived data is an array
    }
} catch {
    print(error)
}
相关问题