如何调用包含块作为参数和 NSString 作为块参数的方法

How to call a method that include a block as a parameter and NSString as the block parameter

我有这样的方法

-(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 *);

我想在我的 GetPostPreperation 方法中为块参数分配一个 NSString 值并检查 return 它来自块调用 method.How 我可以这样做吗?请帮我。 谢谢

这样使用,这里str是输入不是return

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

    }];

更新

不要return这个block.The块类型的任何东西是void(^)(NSString*),return是无效的

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

我还建议您更改方法定义如下:

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

这将在您输入此方法时为您提供自动建议,您只需按回车键即可创建它。

只需使用 String 参数创建块并将该块传递给方法。

喜欢下面

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

[self myMethod:failure];

在块中声明变量名称,以便您可以在使用该块(字符串)时访问它

// 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");

    }