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

Swift 函数和闭包

发布时间:2020-12-14 06:47:03 所属栏目:百科 来源:网络整理
导读:使用 func 来声明一个函数,通过函数的名字和参数来调用函数。使用 - 指定函数返回值(分离了返回值和参数) func greet(name: String,day: String) - String { return "Hello (name),today is (day)." } greet("Bob","Tuesday") 练习:删除 day 参数,并

使用func来声明一个函数,通过函数的名字和参数来调用函数。使用->指定函数返回值(分离了返回值和参数)

func greet(name: String,day: String) -> String {
return "Hello (name),today is (day)."
}
greet("Bob","Tuesday")
练习:删除 day 参数,并添加午餐参数,显示在问候语中



使用元组定义函数的多个返回值

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
}
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 }

(编辑:李大同)

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

    推荐文章
      热点阅读