2015-07-06 45 views
0

我有這樣如何調用一個方法包含嵌段作爲參數,如NSString的塊參數

-(void)GetPostPreperation :(NSMutableURLRequest *)request :(BOOL)isGet :(NSMutableDictionary *)jsonBody :(void(^)(NSString*)) compblock 

我如何可以傳遞參數到這個區塊內的方法?我試過這樣。但它給我一個語法錯誤,Expected Expression

這是我嘗試

[self GetPostPreperation:request :isGet :jsonBody :(^NSString*)str 
{ 
    return str; 

}]; 

的方式這是我如何定義我的塊

typedef void(^myCompletion)(NSString *); 

我想一個NSString值分配給塊參數在我的GetPostPreperation方法中,並檢查並從塊調用方法中返回它。我該如何做?請幫幫我。 感謝

+0

你想要的意思是你問如何使用typedef或其他東西 –

回答

1

以這種方式使用它,這裏str是輸入不返回

[self GetPostPreperation:request :true : jsonBody :^(NSString * str) { 
     //here use 
     NSLog(@"%@",str); 

    }]; 

更新

不從這個block.The塊類型返回任何東西是void(^)(NSString*),回報void

+0

你好thnnks的答案,但對我來說,它給這樣的錯誤不兼容的塊指針類型發送'NSString *(^)(NSString * __強) '參數的類型爲'void(^)(NSString * __ strong)' – IRD

+0

發佈有關您如何使用此函數的完整代碼,我想您會從此塊返回一些東西。塊返回是void.You不需要返回 – Leo

+0

我認爲他需要使用typedef來阻止,我是對的還是我誤解了? –

2
[self GetPostPreperation:nil :YES :nil :^(NSString * string) { 
    //your code 
    NSLog(@"%@", string); 
}]; 

我也建議你改變會見hod的定義如下:

-(void)GetPostPreperation :(NSMutableURLRequest *)request 
          :(BOOL)isGet :(NSMutableDictionary *)jsonBody 
          :(void(^)(NSString* string)) compblock 

這會給你自動建議,當你輸入這個方法,你可以打回車來創建它。

enter image description here

+0

將類型'void(^)(NSString * __ strong)'的參數發送'NSString *(^)(NSString * __ strong)'的不兼容的塊指針類型'我得到這個錯誤。爲什麼這是/ – IRD

+0

爲什麼你從'void'塊返回字符串?如果你想要的話,你需要改變返回類型 –

1

只是使用字符串參數塊和該塊傳遞給方法。

像下面

void (/*Block name*/^failure)(/*block formal parameter*/NSError *) = ^(/*block actual parameter*/NSError *error) { 
     NSLog(@"Error is:%@",error); 
    }; 

[self myMethod:failure]; 
0

塊聲明變量名稱,以便您可以在使用該塊(串)訪問

// typedef of block  
    typedef void(^myCompletion)(NSString * string); 



     NSMutableURLRequest * req = [NSMutableURLRequest new]; 
      NSMutableDictionary * dict = [NSMutableDictionary new]; 

     /// method calling  
      [self GetPostPreperation:req 
           isGet:true 
          jsonBody:dict 
           block:^(NSString *string) { 
            if ([string isEqualToString:@"xyz"]) { 

            } 
            else 
            { 

            } 
           }]; 

當過你的方法有一個以上的參數,那麼它將永遠寫如下(即isGet:(BOOL)isGet),以便調用該方法時很容易

//方法與塊

-(void)GetPostPreperation :(NSMutableURLRequest *)request isGet:(BOOL)isGet jsonBody:(NSMutableDictionary *)jsonBody block:(myCompletion)string 
    { 
     string(@"yes"); 

    } 
相關問題