Swift3 使用 AFNetworking

Swift 3 using AFNetworking

我在 Swift 3.0 中使用 AFNetworking,但我卡在一个代码上。

func getJSON()
    {


        let manager = AFHTTPSessionManager()
        manager.get(
            url,
            parameters: nil,
            success:
            {
                (operation: URLSessionTask!, responseObject: Any?) in

                 print("JSON: " + responseObject!.description)
                 self.matchesArray = responseObject!.object(forKey: "matches")! as? NSMutableArray
                 self.tollBothPlazaTableView.reloadData()
            },

            failure:
            {
                (operation: URLSessionTask!, error: NSError)  in
                print("Error: " + error.localizedDescription)
            }
        )
    }

它显示 failure 块上的错误。

Cannot convert value of type '(URLSessionTask!, NSError) -> ()' to expected argument type '((URLSessionDataTask?, Error) -> Void)?'`

谁能解释一下我的代码有什么问题。也是使用闭包的正确方法? (我是 swift 的新手)。

错误很明显是说使用 Error 而不是 NSError,在 Swift 3 你需要使用 Error 而不是 NSError。所以像下面这样更改你的代码。

func getJSON() {

    let manager = AFHTTPSessionManager()
    manager.get(
        url,
        parameters: nil,
        success:
        {
            (operation, responseObject) in

             if let dic = responseObject as? [String: Any], let matches = dic["matches"] as? [[String: Any]] {
                  print(matches)
             }
             DispatchQueue.main.async {                          
                 self.tollBothPlazaTableView.reloadData()
             }
        },
        failure:
        {
            (operation, error) in
             print("Error: " + error.localizedDescription)
    })
}

注意: 当你在后台线程时,总是在主线程上执行 UI 更改,所以像我一样在主线程上重新加载你的 tableView已经完成,也使用 Swift 原生 ArrayDictionary 而不是 NSArrayNSDictionary.

**最好在 swift 3 中使用 Alamofire(同一开发者)**

func jsonRequest()
{

    let url =  "url"
    //if you want to add paramter
    parametr = ["username" : "user" , "password"]


    Alamofire.request(url, method: .post, parameters: nil, encoding: JSONEncoding.default)
        .responseJSON { response in
            // print(response)
            //to get status code
            if let status = response.response?.statusCode {
                switch(status){
                case 201:
                    print("example success")
                default:
                    print("error with response status: \(status)")
                }
            }

            //to get JSON return value
            if let array = response.result.value as? //NSDictionary [[String : Any]]
            {


            }
    }

}