使用AFNetworking的带有闭包的Swift完成块

时间:2014-12-03 20:58:52

标签: ios xcode swift afnetworking

使用Objective C,我习惯使用此方法从AFHTTPSessionManager封装GET方法并从API JSON获取信息:

- (void)getShowInfo:(void(^)(NSURLSessionDataTask *task, id responseObject))success
                 failure:(void(^)(NSURLSessionDataTask *task, NSError *error))failure
{

    NSString* path = kInfoBaseURLString;


    [self GET:path parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        if (success) {
            success(task, responseObject);
        }
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        if (failure) {
            failure(task, error);
        }
    }];
}

如何在Swift中进行比较,比较成功和失败?我正在尝试这样的事情:

func getShowInfo(success: (task: NSURLSessionDataTask, responseObject: AnyObject) -> Void,
       failure: (task: NSURLSessionDataTask, error: NSError) -> Void) {

    var path : String = kInfoBaseURLString

    GET(path, parameters: nil, success: {(task: NSURLSessionDataTask!, responseObject: AnyObject!) -> Void in
        if (success != nil) {
            success(task, responseObject)
        }
        success = nil
    }, failure: {(task: NSURLSessionDataTask!, error: NSError!) in
        if (failure != nil) {
            failure(task, error)
        }    
    })
}

“if(success!= nil)”和“if(failure!= nil)”中的所有内容都无效。

如何将其转换为swift?

编辑完成错误:

if (success != nil) {

错误:'(任务:NSURLSessionDataTask,responseObject:AnyObject) - > Void'不能转换为'String'

if (failure != nil) {

错误:'(任务:NSURLSessionDataTask,错误:NSError) - > Void'不能转换为'String'

success(task, responseObject)

错误:缺少参数标签的任务:responseObject:'in call

failure(task, error)

错误:缺少参数标签的任务:responseObject:'in call

1 个答案:

答案 0 :(得分:1)

使用Swift中定义的方法,您无法通过nil成功或失败关闭,因此无需进行检查。如果可以传递nil,则需要在方法定义中将成功或失败参数标记为选项。

我建议使用Alamofire代替AFNetworking进行Swift项目,除非您已经将自己束缚在AFNetworking上。