我最近开始研究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中做到这一点......
答案 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()