美文网首页swiftiOS-swift
Swift闭包(一):基础篇

Swift闭包(一):基础篇

作者: 长不大的帅小伙 | 来源:发表于2017-02-09 14:32 被阅读186次

    Swift闭包和OC中block很类似,是一段自包含的函数代码块,可以在代码中使用和传递。相当于一个匿名函数

    闭包写法和演变过程

    通过一个例子来说明这个问题:

    func testClosure(value: Int, paramFunc: (Int) -> Int) -> String {
        return String(paramFunc(value))
    }
    

    这段事例代码再简单不过了,不过我这里还是要说明下testClosure这个函数下的paramFunc参数,这个参数的类型是(Int) -> Int(是一个返回Int,参数是Int的函数)。

    最原始写法

    既然paramFunc参数需要传一个(Int) -> Int类型函数,那么就写一个函数作为参数传递,这种写法的好处就是,这个函数不仅可以在这里当参数传递,还可以在其它地方使用。

    func aa(v: Int) -> Int {
        return v
    }
    testClosure(value: 10, paramFunc: aa)
    

    闭包写法

    • 闭包完整写法
    testClosure(value: 10, paramFunc: { (v: Int) -> Int in
        return v * 10
    })
    
    • 尾随闭包,如果闭包是函数的最后一个参数,闭包参数可以写在参数括号外。
    testClosure(value: 10) { (v: Int) -> Int in
        return v * 10
    }
    
    • 闭包的一些简写方式 (无论是否是尾随闭包都可以根据下面的规则进行简写,我这里只给出了尾随闭包的省略写法实例)
      1. Swift可以根据上下文推理参数和返回值类型,这样返回值类型和参数类型可以省略不写。
      2. 如果闭包主体中是单行语句,单行语句计算结果会隐式地返回,return关键字可以省略。
      3. 参数和in可以去掉,闭包的参数可以通过位置来访问
    // 自动推导返回值类型,参数类型
    testClosure(value: 10) { v in
        return v * 10
    }
    
    // return 省略了
    testClosure(value: 10) { v in
        v * 10
    }
    
    // 注意与函数的区别,函数是有func修饰的,而这里长的很想函数,其实不是函数,而是在调用函数
    testClosure(value: 10) {
        $0 * 10
    }
    

    相关文章

      网友评论

        本文标题:Swift闭包(一):基础篇

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