加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift3 闭包表达式

发布时间:2020-12-14 06:21:53 所属栏目:百科 来源:网络整理
导读:1.闭包表达式概念 闭包是功能性自包含模块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。 闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着

1.闭包表达式概念

闭包是功能性自包含模块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift会为您管理在 捕获 过程中涉及到的内存操作。

在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一:

  • 全局函数是一个有名字但不会捕获任何值的闭包
  • 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包
  • 闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包

Swift的闭包表达式拥有简洁的风格,并鼓励在常见场景中以实现语法优化,主要优化如下:

  • 利用上下文推断参数和返回值类型
  • 单表达式(single-expression)闭包可以省略 return 关键字
  • 参数名称简写
  • Trailing 闭包语法

2.闭包表达式的语法格式

{ (参数列表) ->返回值类型 in
        语句组
}

3.闭包表达式的写法

//sorted函数用于对数组排序,只接受一个函数型参数,描述排序逻辑。
var city = ["z","x","h","n"]

var cityRank1 = city.sorted()   //["h","n","z"]

//0.不用闭包的倒序方法
func daoxu(a: String,b:String) -> Bool {
    return a > b
}
var cityRank2 = city.sorted(by: daoxu)  //["z","h"]

//1.用闭包表达式来改写
var cityRank3 = city.sorted { (a: String,b:String) -> Bool in
    return a > b
}   //["z","h"]

//2.闭包的自动推断:参数和返回类型可自动推断
//参数类型 和 返回值类型 省略,单表达式可以忽略return关键词
var cityRank5 = city.sorted { (a,b) in
    a > b
}   //["z","h"]

//3.可使用快捷参数,前缀$,从0开始递增
var cityRank6 = city.sorted { $0 > $1 }
cityRank6   //["z","h"]

4.闭包表达式的用法

func calculate(opr :String)-> (Int,Int)-> Int { 
    var result : (Int,Int)-> Int    
    switch (opr) {
    case "+" :
//        result = {a,c in return a + c }//与下句同义
        result = {$0 + $1}
    default:
//        result = {a,b in return b - a }//与下句同义
        result = {$1 - $0}  //注意:{$1 - $0}和{$0 - $1}是不同的
    }
    return result;
}

let f1:(Int,Int)-> Int = calculate(opr: "+")
print("10 + 5 = (f1(10,5))")   //"10 + 5 = 15n"

let f2:(Int,Int)-> Int = calculate(opr: "-")
print("5 - 10 = (f2(10,5))")   //"5 - 10 = -5n"

参考自
SwiftV课堂视频源码
http://www.52php.cn/article/p-fkpuysgr-bkt.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读