Swift--08闭包使用

/*闭包有三种形式

 1、全局函数

 2、内嵌函数

 3、闭包表达式

    闭包语法格式

    {

      (参数列表) -> 返回类型 in

        闭包体

    }

*/

 

var array = ["C","B","E","A","D"]

 

//以前可以自定义函数名称传递升降序。然而我现在发现不能传递自定义函数名玩了。

func backwords(s1: String, s2: String) -> Bool {

    return s1 > s2

}

 

//一、默认的升序排列

var sortedArray = array.sorted()

print(sortedArray//["A", "B", "C", "D", "E"]

 

//传递闭包表达式展开式 :降序排列

var sortedArray1 = array.sorted(by:{(s1: String, s2: String) -> Bool in

    return s1 > s2 // 使用‘<’ 升序排列

})

print(sortedArray1) //["E", "D", "C", "B", "A"]

 

//二、Swift的灵活之处再次嘚瑟

var sortedArray2 = array.sorted(by:>) //降序排列

print(sortedArray2)         // ["E", "D", "C", "B", "A"]

var sortedArray3 = array.sorted(by:<) //升序排列

print(sortedArray3)         // ["A", "B", "C", "D", "E"]

 

//可以通过参数位置而不是参数名字来引用参数----这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,他可以直接跟在括号后面。当一个闭包是传给函数的唯一参数,可以完全忽略括号

var sortedA = array.sorted(by: {$0 > $1})

print(sortedArray4) //["E", "D", "C", "B", "A"]

 

//可以忽略参数类型(会自动推断),()也可省略,返回值类型也可省略

var sortedC = array.sorted(by: {s1,s2 in return s1 < s2})

//sortedC值: ["A", "B", "C", "D", "E"]

单表达式闭包,可以省了return关键字

var sortedB = array.sorted(by: {s1,s2 in s1>s2})

//sortedB值 ["E", "D", "C", "B", "A"]

//闭包内可以使用简化参数:$0、$1,此时可以省略参数及in

var sortedA = array.sorted(by: {$0 > $1})

//sortedA值 ["E", "D", "C", "B", "A"]

 

//三、map的使用

/*

 函数实际上是一种特殊的闭包:它是一段能之后被调取的代码。闭包中的代码能访问闭包所建作用域中能得到的变量和函数,即使闭包是在一个不同的作用域被执行的。你可以使用{}来创建一个匿名闭包。使用 in 将参数和返回值类型声明与闭包函数体进行分离。

 */

let numberArray = [15,20,8,10,21]

//1、map的完全式

let mappedArray =  numberArray.map { (number:Int) -> Int in

    let result = 2 * number

    return result

}

print(mappedArray); //[30, 40, 16, 20, 42]

 

//有很多种创建更简洁的闭包的方法,如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把语句的值当做结果返回。

//2、map精简式

let mapppedNumbers = numberArray.map({number in 3 * number})

print(mapppedNumbers) //[45, 60, 24, 30, 63]

 

//3、map的应用

let cast = ["VIVIEN", "Marlon", "Kim", "Karl"]

let lowercaseNames = cast.map { $0.lowercased() }//直接获取元素的全部小写字母

   print(lowercaseNames)//["vivien", "marlon", "kim", "karl"]

let letterCounts = cast.map { $0.characters.count }//直接获取元素的字符串字母个数。

   print(letterCounts)//[6, 6, 3, 4]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值