美文网首页SwiftiOS开发专题文章收藏
iOS Objective-C与Swift闭包(block)写法

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

作者: Ucself | 来源:发表于2016-11-04 16:50 被阅读548次

    前言

    在项目开发中经常会去查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 版本根据参数和返回值有很多缩写方式,这里就不一一写上了。

    相关文章

      网友评论

        本文标题:iOS Objective-C与Swift闭包(block)写法

        本文链接:https://www.haomeiwen.com/subject/zwfwuttx.html