SwiftiOS开发专题文章收藏

iOS Objective-C与Swift闭包(block)写法

2016-11-04  本文已影响548人  Ucself

前言

在项目开发中经常会去查iOS闭包怎么写,因为它的语法太古怪,两种语言写法不一,经常搞混,干脆记录下常用的写法算了

闭包定义

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。

声明闭包(block)

typedef NSString *(^blockCallback)(NSString *parameter1, NSString *parameter2);
//回调闭包 用于评价成功后
    typealias callbackFunc = (_ orderId:String ) -> Void
    var evaluationBlockCallback:callbackFunc?

定义闭包(block)

>第一种方式 使用声明
@property (nonatomic,strong) blockCallbackType blockCallbackName;

_blockCallbackName = ^(NSString *parameter1,NSString *parameter2){
        return parameter1;
    };
>第二种方式 不使用声明
@property (nonatomic,strong) NSString *(^blockCallbackName2)(NSString *parameter1, NSString *parameter2);

_blockCallbackName2 = ^(NSString *parameter1,NSString *parameter2){
        return parameter1;
    };
let blockCallbackName:String = {(parameter1:String,parameter2:String) ->String in
            return parameter1
        }("parameter1","parameter2")

函数定义闭包(block)

-(void)functionUseBlock:(NSString* (^)(NSString *parameter1, NSString *parameter2))callBackOne callBackTwo:(blockCallbackType)callBackTwo{
    if (callBackOne) {
        callBackOne(@"parameter1",@"parameter2");
    }
    if (callBackTwo) {
        callBackTwo(@"parameter1",@"parameter2");
    }
}
func functionUseBlock(callBack:(String,String) ->String) -> Void  {
        print(callBack("parameter1","parameter2"))
    }

调用函数闭包(block)

[self functionUseBlock:^NSString *(NSString *parameter1, NSString *parameter2) {
        return parameter1;
    } callBackTwo:^NSString *(NSString *parameter1, NSString *parameter2) {
        return parameter1;
    }];
self.functionUseBlock = { (parameter1, parameter2) -> String in
            return parameter2
        }

结尾

Swift 版本根据参数和返回值有很多缩写方式,这里就不一一写上了。

上一篇下一篇

猜你喜欢

热点阅读