Swift编程语言入门之函数与闭包
作者:本站整理 时间:2015-04-10
闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。
使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。
func greet(name: String, day: String) -> String {
return "Hello (name), today is (day)."
}
greet("Bob", "Tuesday")
练习
去掉 day 参数,添加一个参数包含今天的午餐选择。
使用元组(tuple)来返回多个值。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
练习
编写一个函数计算其参数的平均值。
函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免过长和过于复杂。
func returnFifteen() -> Int {
var y = 10
func add()
{
y += 5
}
add()
return y
} //by gashero
returnFifteen()
函数是第一类型的。这意味着函数可以返回另一个函数。
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
一个函数可以接受其他函数作为参数。
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
练习
重写一个闭包来对所有奇数返回0。
编写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两者。单一语句的闭包可以直接返回值。
numbers.map({number in 3 * number})
你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。
sort([1, 5, 3, 12, 2]) { $0 > $1 }
闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。
使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。
func greet(name: String, day: String) -> String {
return "Hello (name), today is (day)."
}
greet("Bob", "Tuesday")
练习
去掉 day 参数,添加一个参数包含今天的午餐选择。
使用元组(tuple)来返回多个值。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
练习
编写一个函数计算其参数的平均值。
函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免过长和过于复杂。
func returnFifteen() -> Int {
var y = 10
func add()
{
y += 5
}
add()
return y
} //by gashero
returnFifteen()
函数是第一类型的。这意味着函数可以返回另一个函数。
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
一个函数可以接受其他函数作为参数。
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
练习
重写一个闭包来对所有奇数返回0。
编写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两者。单一语句的闭包可以直接返回值。
numbers.map({number in 3 * number})
你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。
sort([1, 5, 3, 12, 2]) { $0 > $1 }
闭包是引用了自由变量的函数,最早实现闭包的编程语言是Scheme,之后被广泛使用于函数式编程语言。而Swift编程语言也支持闭包,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。接下来我们就具体来了解下Swift函数与闭包。
使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。
func greet(name: String, day: String) -> String {
return "Hello (name), today is (day)."
}
greet("Bob", "Tuesday")
练习
去掉 day 参数,添加一个参数包含今天的午餐选择。
使用元组(tuple)来返回多个值。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
练习
编写一个函数计算其参数的平均值。
函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免过长和过于复杂。
func returnFifteen() -> Int {
var y = 10
func add()
{
y += 5
}
add()
return y
} //by gashero
returnFifteen()
函数是第一类型的。这意味着函数可以返回另一个函数。
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
一个函数可以接受其他函数作为参数。
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
练习
重写一个闭包来对所有奇数返回0。
编写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两者。单一语句的闭包可以直接返回值。
numbers.map({number in 3 * number})
你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。
sort([1, 5, 3, 12, 2]) { $0 > $1 }
相关文章
相关推荐
-
定时播音员 5.50(语音广播)
-
安捷播放器官方下载(视频播放器) 16.0.3.51 官方免
-
洛奇英雄传辅助免费版 V2016.2.0
-
旗鱼浏览器32位安装版 V2.0.0.3
-
动态域名小助手 1.1.1.2(动态域名检测和修复)
-
Inpaint Version(图片美化工具)1.1 绿色版
-
伪原创工具 2.0.1.10(伪原创文章生成器)
-
Netcam Studio 1.1.8.5(视频监控软件)
-
NirLauncher绿色版 v1.19.108
-
迅捷PDF虚拟打印机官方版 v1.0
-
ROOT大师 V1.8.6.19461 PC版(手机ROOT工具)
-
炫云客户端官方版 v5.0.16.9.11042
-
PotPlayer播放器 v1.6.596 官方中文版
-
iMatch 5.4.3(图片批量处理)
-
vst全聚合PC版 v1.8.3.0
-
新星AVI视频格式转换器 7.1.0.0(新星格式转换器)