__block
void test2() {
// __block有2个下划线
__block int c = 15;
// 声明了一个block变量
MySum sum = ^(int a, int b) {
// 如果外部的变量用了__block关键字,就可以在block内部修改这个变量
c = 19;
// block可以访问外面定义的变量
NSLog(@"c is %i", c);
return a + b;
};
NSLog(@"%i", sum(10, 10));
}
在objective-c中,我们通常使用__block来声明一个变量,这样就可以在闭包内对这个变量进行修改。
在swift中没有__block这种关键字,但是swift中的闭包是做了优化处理,是可以直接捕获上下文中的变量。所以可以直接在闭包中对变量进行修改。
block
swift block
@property (nonatomic,copy) void(^UserHeadImgClick)(NSString *text); //block
if(self.UserHeadImgClick)
{
self.UserHeadImgClick(@"xx");
}
self.UserHeadImgClick = ^(NSString *text)
{
};
typedef void (^AFHTTPRequestCompletionHandler)(id response, NSError *error);
@interface MJAFNetWorking : NSObject
+ (void)getWithURLString:(NSString *)URLString
parameters:(id)parameters
completion:(AFHTTPRequestCompletionHandler)completionBlock;
+ (void)showCustom:(NSString *)title ConfirmBlock:(void(^)(NSDate *date))confirmBlock