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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- react-native,react-redux和redux配合开发
- objective-c – 我如何在Objective C中创建和填充NSArray有
- 正则表达式
- 将SELECT DISTINCT转换为Postgresql到MySQL的查询
- c – 有一个对象的“模拟”,但是对于函数?
- ruby – 错误:运行elastic-mapreduce指定分布式缓存文件时
- ruby-on-rails – rails应用程序中的静态图像资源不在Herok
- C++ 操作符重载实践 & java没有重载操作符的思路
- c# – 应用程序崩溃无一例外或日志(似乎是xamarin/mono bug
- postgresql计算球面距离的一个应用