在 Swift 中使用 AFNetworking 接收响应
Receiving response using AFNetworking in Swift
我是 AFNetworking
的新手,我正在尝试按照 Raywenderlich 的教程进行操作。所以我得到了用于 JSON
解析的代码,我正在努力将其转换为 Swift
。我尝试了很多教程和 Whosebug 的答案,但找不到很好的解释。
- (IBAction)jsonTapped:(id)sender
{
// 1
NSString *string = [NSString stringWithFormat:@"%@weather.php?format=json", BaseURLString];
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// 3
self.weather = (NSDictionary *)responseObject;
self.title = @"JSON Retrieved";
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 4
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}];
// 5
[operation start];
}
那么,有人可以帮助我了解使用 AFNetworking
解析数据的基础知识吗?
问题是你为什么要在 Swift
中使用 Objc
。有很多框架可以替代 AFNetworking
.
事实上,同一个开发者在 Swift
中开发了名为 Alamofire
的 Network Library
您可以使用该框架并获得相同的响应:
这是它的演示示例!
func postWebserviceWithURL(strUrl: String, param: NSDictionary?, completionHandler: (NSDictionary?, NSError?) -> ()) -> (){
Alamofire.request(.POST, strUrl, parameters: param as? [String : AnyObject], encoding: ParameterEncoding.URL).responseJSON { response in
switch response.result {
case .Success(let data):
let json = data as? NSDictionary
completionHandler(json, nil)
case .Failure(let error):
completionHandler(nil, error)
self.showSingleAlert("app_name", message: error.localizedDescription)
}
}
}
是的,您可以在 swift 中轻松使用 AFnetworking 库,您需要创建 Bridging-Header.h 文件并将 AFNetworking.h 导入 Bridging-Header.h 文件
并在您的 json 方法中尝试使用下面的代码
let urlAsString = "<Your json URL in string>"
let manager = AFHTTPRequestOperationManager()
manager.POST(
urlAsString,
parameters: <Parameter>,
success: { (operation: AFHTTPRequestOperation!,
responseObject: AnyObject!) in
print("JSON: " + responseObject.description)
},
failure: { (operation: AFHTTPRequestOperation!
error: NSError!) in
}
)
我是 AFNetworking
的新手,我正在尝试按照 Raywenderlich 的教程进行操作。所以我得到了用于 JSON
解析的代码,我正在努力将其转换为 Swift
。我尝试了很多教程和 Whosebug 的答案,但找不到很好的解释。
- (IBAction)jsonTapped:(id)sender
{
// 1
NSString *string = [NSString stringWithFormat:@"%@weather.php?format=json", BaseURLString];
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// 3
self.weather = (NSDictionary *)responseObject;
self.title = @"JSON Retrieved";
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 4
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}];
// 5
[operation start];
}
那么,有人可以帮助我了解使用 AFNetworking
解析数据的基础知识吗?
问题是你为什么要在 Swift
中使用 Objc
。有很多框架可以替代 AFNetworking
.
事实上,同一个开发者在 Swift
中开发了名为 Alamofire
您可以使用该框架并获得相同的响应:
这是它的演示示例!
func postWebserviceWithURL(strUrl: String, param: NSDictionary?, completionHandler: (NSDictionary?, NSError?) -> ()) -> (){
Alamofire.request(.POST, strUrl, parameters: param as? [String : AnyObject], encoding: ParameterEncoding.URL).responseJSON { response in
switch response.result {
case .Success(let data):
let json = data as? NSDictionary
completionHandler(json, nil)
case .Failure(let error):
completionHandler(nil, error)
self.showSingleAlert("app_name", message: error.localizedDescription)
}
}
}
是的,您可以在 swift 中轻松使用 AFnetworking 库,您需要创建 Bridging-Header.h 文件并将 AFNetworking.h 导入 Bridging-Header.h 文件
并在您的 json 方法中尝试使用下面的代码
let urlAsString = "<Your json URL in string>"
let manager = AFHTTPRequestOperationManager()
manager.POST(
urlAsString,
parameters: <Parameter>,
success: { (operation: AFHTTPRequestOperation!,
responseObject: AnyObject!) in
print("JSON: " + responseObject.description)
},
failure: { (operation: AFHTTPRequestOperation!
error: NSError!) in
}
)