2014年6月18日

Swift筆記:Functions and Closures

宣告函數使用func,呼叫funciton使用名字、參數。使用->指定return型態。
func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")

多個return值的寫法
func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
呼叫方式:
getGasPrices()
function可以帶不定個數的數值當作參數
func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
呼叫方式:
sumOf()
sumOf(42, 597, 12)

function裡面可以包含其他的function,內層的function可以使用外層的變數,如果一個function較複雜的時候可以用這種方式來做簡化。
func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}

function本身可以當作參數,也能當作return值
當作return值的範例:

func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
當作參數的範例:
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)
可以使用{}來建立一個匿名函數closures。使用in把參數和return類型和function本身的內容分開。
numbers.map({
    (number: Int) -> Int in
    let result = 3 * number
    return result
})
如果匿名函數中只有一行,就會自動將這一行的數值當成return值。

沒有留言: