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

时间:2015-07-06 05:16:40

标签: ios objective-c-blocks

我有这样的方法

     $( ".eventPeriod" ).droppable({
            tolerance: 'touch',
            activeClass: "ui-state-hover",
            hoverClass: "ui-state-active",
            drop: function( event, ui ) {
                $( this )
                    .addClass( "ui-state-highlight" );
                    return false;
            }
        });

如何在一个块中将参数传递给它?我试过这样的。但它给我一个语法错误,-(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值,然后检查并从块调用方法返回它。我该怎么做?请帮我。 感谢

4 个答案:

答案 0 :(得分:2)

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

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

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

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

enter image description here

答案 1 :(得分:1)

以这种方式使用它,这里str是一个输入而不是

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

    }];

更新

不要从此块返回任何内容。块类型为void(^)(NSString*),返回无效

答案 2 :(得分:1)

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

如下所示

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

[self myMethod:failure];

答案 3 :(得分:0)

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

.menu-open .content {
  transform: translateX(40%) scale(0.85);
}

当你的方法有多个参数时,它总是会像下面那样写(即isGet:(BOOL)isGet)所以在调用该方法时很容易

//带块的方法

// 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
                                   {

                                   }
                               }];