2015-11-05 22 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() 
相關問題