美文网首页
Swift 学习:闭包

Swift 学习:闭包

作者: 逸飞u | 来源:发表于2016-04-16 20:18 被阅读11次

认识闭包

是一个函数类型实例,一段自包含的代码块,可被用于函数类型的变量\参数\返回值
匿名函数(没有名字的函数)
类似于 OC 中的 block

三种闭包的形式:全局函数\嵌套函数\闭包表达式

//闭包表达式
rects.sort({ (first:Rectangle, second:Rectangle)->Bool in
    
    return first.width*first.length<=second.width*second.length
    
})

闭包是引用类型,闭包变量拷贝具有引用语义

闭包和函数类型实例具有同样的内存模型

14607083327736.jpg

闭包表达式

1.完整形式:

函数{(参数名1:参数类型1,参数名2:参数类型2...)->返回值类型 in
    语句块
    return 返回值
}

2.自动类型推断:省略参数类型和返回值类型

函数({ 参数名1, 参数名2 in    
   语句块
   return 返回值
})

3.单表达式闭包:省略 return 关键词

函数({ 参数名1, 参数名2 in 语句块})

4.参数缩略形式$0,$1:省略参数声明和 in

//参数缩略形式
函数({$0 > $1})

5.操作符函数自动推导为函数类型

//操作符缩略式
函数( > )

6.尾随闭包:闭包的表达式为函数的最后一个参数,可放在后面(没有参数可以省略()括号)

函数[()]{ 参数名1, 参数名2 in 语句块}

7.自动闭包:不接受任何参数

var cities = ["Beijing", "Shanghai", "New York", "Paris", "London"]
let filter =    { cities.removeLast() } //没有执行,延迟计算
//let filter =  cities.removeLast() //执行

函数类型和闭包的变量捕获

  • 函数类型和闭包可以捕获上下文任何值
  • 如果捕获值生存周期小于闭包对象,系统将捕获值封装在临时对象里
  • 临时对象和闭包对象之间是强引用关系,生存周期跟随闭包对象
    //捕获实例属性
class Rectangle{
    var width=0
    var length=0
    
    static var max=100
    
    init(width:Int, length:Int){
        self.width=width
        self.length=length
    }
    
    func getComputeHandler()->() -> Int{
        
        return {
            return self.width*self.length//捕获
        }
        
    }
}
//捕获参数或局部变量

func addHandler(step: Int) -> () -> Int {
    var sum = 0
    
    return {

        sum += step //捕获了 sum 和 step
        sum += 1
        return sum
    }
    
      
}

相关文章

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

  • swift学习

    * 闭包 * 闭包作为属性 ```swift // 声明闭包类型 typealias callba...

网友评论

      本文标题:Swift 学习:闭包

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