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

Swift--08闭包使用

发布时间:2020-12-14 06:17:21 所属栏目:百科 来源:网络整理
导读:/* 闭包有三种形式 1 、全局函数 2 、内嵌函数 3 、闭包表达式 闭包语法格式 { ( 参数列表 ) - 返回类型 in 闭包体 } */ var array = [ "C" , "B" , "E" , "A" , "D" ] // 以前可以自定义函数名称传递升降序。然而我现在发现不能传递自定义函数名玩了。 func

/*闭包有三种形式

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","A"]


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

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

print(sortedArray2) // ["E","A"]

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

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

let sortedArray4 = array.sorted{$0 > $1}

print(sortedArray4) //["E",33)"> //下面的三条用法不能玩了。。。。

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

//var sortedArray = array.sort({s1,s2 in return s1 > s2})

//

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

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

//var sortedArray = array.sort({$0 > $1})

//


//三、map的使用

/*

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

*/

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

//1map的完全式

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

let result = 2 * number

return result

}

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


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

//2map精简式

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

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


//3map的应用

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]

(编辑:李大同)

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

    推荐文章
      热点阅读