2015-11-05 23 views
0

我最近开始使用swift。在这里,我正面临着块的问题,所以请帮助做到这一点。在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 
} 

所以我们如何能做到这一点在迅速...

+0

快速查看关闭。有相当多的教程和解释。闭包相当于迅速的块。 https://www.google.com.au/search?client=safari&rls=zh-CN&q=clsousure+swift&ie=UTF-8&oe=UTF-8&gfe_rd=cr&ei=xug6VpO1C-HN8Ae0-oCQAw#q=closure+swift –

+0

我应该怎么做使用关闭,我搜索了很多关于但没有得到正确 – pritam

回答

4

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

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

{ (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() 
相关问题