从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败

Posted

技术标签:

【中文标题】从 \'Result<AnyObject>\' 转换为不相关类型 \'NSArray\' 总是失败【英文标题】:Cast from 'Result<AnyObject>' to unrelated type 'NSArray' always fails从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败 【发布时间】:2015-08-02 10:41:45 【问题描述】:

以下代码在 XCode 6/Swift 1 上运行正常,但在 XCode 7/Swift 2 上给我一个错误

Alamofire.request(.POST, "\(self.REQ_URL)", parameters: parameters).validate(contentType: ["application/json"]).responseJSON(options: [], completionHandler:  (req, resp, data) -> Void in

        let data_ar = data as! NSArray //here I get the error 

        )

我得到的错误是

从“结果”转换为不相关类型“NSArray”总是失败

我应该如何使用返回的 JSON?

【问题讨论】:

【参考方案1】:

似乎语法已经改变,下面的作品

Alamofire.request(.POST, "\(self.REQ_URL)", parameters: parameters)
    .responseJSON  request, response, result in
        switch result 
        case .Success(let data):
            let data_ar = data as! NSArray

        case .Failure(let data, let error):
            print("Request failed with error: \(error)")


        
    

【讨论】:

【参考方案2】:

以防万一您将 swiftyjson 用于 xcode 7 分支,

    Alamofire.request(.POST, "\(self.REQ_URL)", parameters: parameters)
.responseJSON  request, response, result in
    switch result 
    case .Success(let data):
        let json = JSON(data)
        let something = json["aaa"].string
        ....

    case .Failure(let data, let error):
        print("Request failed with error: \(error)")

【讨论】:

以上是关于从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败的主要内容,如果未能解决你的问题,请参考以下文章

无法将 '[String : AnyObject]?.Type' 类型(又名 'Optional<Dictionary<String, AnyObject>>.Type)的值转

在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?

如何将 Array<AnyObject> 转换为空数组变量?

错误:无法将 [anyobject] 转换为强制类型数组<_>

转换非托管<AnyObject>!在 Swift 中使用布尔值

无法使用类型为“((AnyObject!,NSInteger,UnsafeMutablePointer<ObjCBool​​>)->())”的参数列表调用“enumerateObje