在 swift 中使用块

Using block in swift

我最近开始研究 swift。我现在遇到了积木问题,所以请帮忙解决这个问题。

Class 1:

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

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

块变量声明:

@property (nonatomic, copy) AHServicesCallsWrapperBlock webServiceWrapperBlockHandler;

并传递块值

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

在Class 2: 我在另一个视图控制器中使用这个块,比如:

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

那么我们如何在 swift...

中做到这一点

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

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

{ (parameters) -> return type in
    statements
}

示例:

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

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