Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Swiftの関数はオブジェクトとして使える

JS使いならふつーの話だけど。こういうコードを見るとObjective-Cとは全く別やなぁ・・・

//Intを引数にしてIntを返す関数を返す
func makeIncremeter()->(Int->Int) {
    func plus(number:Int) -> Int {
        return number + 1
    }
    return plus
}
var increment = makeIncremeter()
increment(111)

//intの配列と、intを引数にBoolを返す関数を引数に、Boolを返す
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 int_arr = [23,2,33,42,1]
hasAnyMatches(int_arr, lessThanTen)

//クロージャはこう
//{(引数) -> 戻り値の型 in 処理}という書式
//外からソート条件与えたり集計条件を与えたりするのに便利よね。
var closure_sort = sorted(names,{(s1:String,s2:String) -> Bool in
    return s1 > s2
})