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

swift 学习笔记二:Closures

发布时间:2020-12-14 01:54:57 所属栏目:百科 来源:网络整理
导读:Closure Expression Syntax(语法定义) { ( parameters ) - return type in statements } 看一个例子,对字符串数组排序: var names = […] var reversed = sorted(names,{(s1: String,s2: String) - Bool in return s1 s2 }) swift还提供了一连串的简化方
Closure Expression Syntax(语法定义)

{ ( parameters) -> return type in
statements
}

看一个例子,对字符串数组排序:

var names = […]
var reversed = sorted(names,{(s1: String,s2: String) -> Bool in
return s1 > s2
})

swift还提供了一连串的简化方法:
1. Referring Type from Context (从上下文环境中推断参数和返回值的类型,就可以省略不写了)

var reversed = sorted(names,{s1,s2 in return s1 > s2})


2. Implicit Returns from Single-Expression Closures(如果只有一行语句,return 也可以省略)

var reversed = sorted(names,s2 in s1 > s2})


3. Shorthand Argument Names (命名参数也可以省略,用 $n 代替)

var reversed = sorted(names,{$0 > $1})

4. Operator Functions (直接用操作符)

var reversed = sorted(names,>)


. Trailing Closures (如果Closure是最后一个参数,可以写在参数括号的外面)

sample 1:
var reversed = sorted(names) { $0 > $1}

sample 2:
let digitNames = [
0 : "Zero" , 1 : "One" ,216)">2 : "Two" ,216)">3 : "Three" ,216)">4 : "Four" ,
5 : "Five" ,216)">6 : "Six" ,216)">7 : "Seven" ,216)">8 : "Eight" ,216)">9 : "Nine"
]
let numbers = [ 16 ,216)">58 ,216)">510 ]

numbers . map {
(
var number) -> String in
var output = ""
while number > 0 {
output =
digitNames [number% 10 ]! + output
number /=
10
}
return output
}

. Capturing Values (访问上下文中的变量,即使外部函数已经结束,它所捕获的变量依然存在,见下面例子中的runningTotal )

func makeIncrementer(forIncrement amount: Int ) -> () -> Int {

var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}

return incrementer
}

let incrementByTen = makeIncrementer (forIncrement: 10 )
incrementByTen ()10
incrementByTen ()20

let incrementBySeven = 7 )
incrementBySeven ()7
incrementBySeven ()14

. Closures Are Reference Types (Closure是引用类型,还是看 runningTotal)

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen() 30

(编辑:李大同)

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

    推荐文章
      热点阅读