Swift使用func
关键字定义函数,然后与C语言一样使用函数名进行调用,而函数返回值类型用->
标示。
<code class="lua hljs" data-origin="" func greet(name: String, day: String) -> String {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
<code class="lua hljs" data-origin=""
试验
移除day
参数,添加一些别的信息
<code class="lua hljs" data-origin=""
使用元组从函数中返回多个值。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" func getGasPrices() -> (Double, Double, Double) {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" Swift的函数可以接受可变参数。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" func sumOf(numbers: Int...) -> Int {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(43, 597, 12)
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 试验
编写一个计算参数平均值的函数
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" Swift的函数可以进行嵌套。被嵌套的函数可以访问外面函数定义的变量。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" func returnFifteen() -> Int {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" Swift中的函数也是基本的数据类型,也就是说可以在一个函数中返回另外一个函数。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" func makeIncrementer() -> (Int -> Int) {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 函数当然也可以作为其它函数的参数进行传递。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">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)
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 实际上Swift中的函数是闭包的一个特例。我们可以使用没有名字的{}
来定义闭包,而闭包内容与返回值类型之间用in
进行分隔。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" numbers.map({" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 试验
重写上面的闭包,使得所有的奇数都返回0
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 还有几种方式可以使得闭包的编写更加简洁。当闭包的类型是已知的,比如作为回调或者代理的时候,你可以省略参数类型或者返回值类型。如下:
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" numbers.map({ number in 3 * number })" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">numbers.map({ number in 3 * number })
<code class="lua hljs" data-origin=""
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" 在闭包中还可以使用位置来引用参数,这在编写非常短的闭包的时候比较有用。当闭包作为函数的最后一个参数时,可以将它放在函数的圆括号后面。
<code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" <code class="lua hljs" data-origin="" sort([1, 5, 3, 12, 2]){ $0 > $1 }" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110, 107, 94); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important;">sort([1, 5, 3, 12, 2]){ $0 > $1 }