在swift中使用块

时间:2015-11-05 05:12:50

标签: ios swift closures block

我最近开始研究swift。在这里,我面临着积木的问题,所以请帮助这样做。

第1课:

我在Objective-C中使用了这样的块:

typedef void (^AHServicesCallsWrapperBlock)(id, NSError *);

块变量的声明:

@property (nonatomic, copy) AHServicesCallsWrapperBlock webServiceWrapperBlockHandler;

并传递一个值

self.webServiceWrapperBlockHandler([graphData objectForKey:@"data"], nil);

在第2课: 我在另一个视图控制器中使用此块,如:

AHServiceCallWrapper *webServicesCallsWrapper = [[AHServiceCallWrapper alloc] init];
webServicesCallsWrapper.webServiceWrapperBlockHandler = ^(id response, NSError *error)
{
     // do stuff
}

那么我们怎么能在swift中做到这一点......

1 个答案:

答案 0 :(得分:4)

您可以在Swift中使用闭包,闭包是一个独立的功能块,可以在代码中传递和使用。 Swift中的闭包类似于C和Objective-C中的块。

Closure表达式语法具有以下一般形式:

{ (parameters) -> return type in
    statements
}

示例:

如果你需要在类中定义任何闭包作为对象,如下所示,

class AHServiceCallWrapper {
  var completionBlock: ((AnyObject, NSError) -> Void)? = nil

  func doSomeStuff() {
    var json = [AnyObject]()
    var error : NSError? = nil
    //Do some stuff if completed
     if let completionBlock = self.completionBlock {
            completionBlock(json, error);
     }
  }
}

现在,您可以使用

之类的实现
let serviceCall = AHServiceCallWrapper()
serviceCall.completionBlock =  { (response, error) -> Void in
        //Do the stuff on completion 
    }
serviceCall.doSomeStuff()