在 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()
我最近开始研究 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()