繁体   English   中英

在Swift中使用AFNetworking接收响应

[英]Receiving response using AFNetworking in Swift

我是AFNetworking ,我正尝试遵循Raywenderlich的教程。 因此,我已经获得了用于JSON解析的代码,并且正在努力将其转换为Swift 我尝试了许多教程和StackOverflow答案,但是找不到很好的解释性说明。

- (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)
            }
        }
    }

是的,您可以轻松地快速使用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
  }
 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM