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 原生 Array
和 Dictionary
而不是 NSArray
和 NSDictionary
.
**最好在 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]]
{
}
}
}
我在 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 原生 Array
和 Dictionary
而不是 NSArray
和 NSDictionary
.
**最好在 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]]
{
}
}
}