如何调用包含块作为参数和 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");
}
我有这样的方法
-(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");
}