本文學習自《 The Swift Programming Language-swift2.0官方手冊 中文版》的電子版
是記錄自己的Swift學習曆程、整理相關資料便于檢視
函數
使用func來聲明一個函數,使用名字和參數來調用函數,使用->來指定函數傳回值的類型
func greet(name:String,day:String) ->String {
return "Hello \(name),today is \(day)."
}
greet("Unique",day: "Tuesday")
練習:删除day參數,添加一個參數表示想要幹什麼
func intro(name:String,lunch:String) ->String {
return "Hi \(name),I want to \(lunch)"
}
intro("Unique", lunch: "sleepping")
使用元組來讓一個函數傳回多個值,該元組的元素可以用名稱或數字來表示
func calcu (scores:[Int]) ->(min : Int,max : Int,sum : Int) {
var min = scores[]
var max = scores[]
var sum =
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min,max,sum)
}
let statis = calcu([,,,,])
print(statis.sum)
print(statis)
函數可以帶有個數可變的參數,在函數内表現為數組的形式
func sumOf(numbers:Int...) ->Int {
var sum =
for number in numbers {
sum += number
}
return sum
}
//[Int]表示該參數是數組類型 Int...表示該參數是可變參數
sumOf()
sumOf(,,)
練習:寫一個計算參數平均值的函數
func meanOf(numbers:Int...) ->Int {
var sum =
var mean =
for number in numbers {
um += number
}
mean = sum / numbers.count
return mean
}
meanOf(,,)
meanOf(,,)
函數可以嵌套,被嵌套的函數可以通路外側函數的變量,你可以使用嵌套函數來重構一個太長或者太複雜的函數
func returnFifteen() ->Int {
var y =
func add() {
y +=
}
add()
return y
}
returnFifteen()
函數是第一等類型 也就是說函數可以作為另一個函數的傳回值
func makeIncrenebter() ->(Int ->Int) {
func addOne(number:Int) ->Int {
return + number
}
return addOne
}
var increment = makeIncrenebter()
increment()
addOne作為makeIncrenebter()的傳回值
函數也可以當做參數傳入另一個函數
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 <
}
var numbers = [,,,]
hasAnyMatches(numbers, condition: lessThanTen)
閉包
函數實際上是一種特殊的閉包:它是一段在之後能被調取的代碼。
閉包中的代碼能通路閉包所建作用域中能夠得到的變量和函數,即使閉包是在一個不同的作用域被執行的,在嵌套函數的例子中可以展現
可以使用{}在建立一個匿名閉包
使用in将參數和傳回值類型聲明與閉包的函數體分離開
numbers.map { (number: Int) -> Int in
let result = * number
return result
}
有很多種建立更簡潔的閉包的方法。如果閉包的類型已知,如果作為一個回調函數,你可以忽略參數的類型和傳回值。單個語句閉包會把它語句的值當做結果傳回
let mapNumbers = numbers.map({ number in * number})
print(mapNumbers)
你也可以通過參數位置來引用參數 – 此方法在非常短的閉包中非常有用
當一個閉包作為最後一個參數傳給一個函數的時候,他可以直接跟在括号後面
當一個閉包是傳給函數的唯一參數,你可以完全忽略括号
let sortesNumbers = numbers.sort{$0 > $1}
print(sortesNumbers)