Swiftクローズドパッケージ式

6579 ワード

閉パッケージは機能的な自己包含モジュールであり、コードで伝達され、使用することができる.Swiftの閉パッケージは、CおよびObjective-Cのblocksおよび他のプログラミング言語のlambdasと似ています.
閉パッケージの形式は主に3種類あります.
1.グローバル関数は、名前が付いていても値が取得されない閉パッケージです.
2.ネストされた関数は名前があり、閉じた関数ドメイン内の値をキャプチャできる閉じたパッケージです.
3.クローズド・パッケージ式は、軽量レベルの構文で書かれたコンテキスト内の変数または定数値をキャプチャできる名前のないクローズド・パッケージです.
Swiftの閉パッケージ式は簡潔なスタイルを持ち、一般的なシーンで文法の最適化を実現することを奨励しています.主に以下のように最適化されています.
*コンテキストを使用してパラメータと戻り値のタイプを推定
*シングルエクスプレッション(single-expression)クローズドパッケージはreturnキーワードを省略できます
*パラメータ名の略記
*Trailingクローズドパッケージ構文(最後のクローズドパッケージ)
ネストされた関数:
1 var nums = [1,9,2,8]

2 func testF(num1 : Int, num2 : Int) -> Bool{

3     return num1 > num2

4 }

5 sort(&nums, testF)

6 println(nums)//[9, 8, 2, 1]

最適化された閉パッケージ式はありません:
1 var nums = [1,9,2,8]

2 sort(&nums,{(num1:Int,num2:Int) -> Bool in //in                 

3 return num1 > num2

4 })

5 println(nums)//[9, 8, 2, 1]

クローズドパッケージ関数式の簡略化:(構文最適化)
5 var nums = [1,9,2,8]

6 sort(&nums,{(num1,num2) in           //in                 

7     return num1 > num2

8     })

9 println(nums)//[9, 8, 2, 1]

再簡略
var nums = [1,9,2,8]

sort(&nums,{ $0 > $1})//$0       ,$1       

println(nums)//[9, 8, 2, 1]

再簡略
var nums = [1,9,2,8]

sort(&nums,>)//     Swift                (>)     func >(lhs: Int, rhs: Int) -> Bool

println(nums)//[9, 8, 2, 1]

Trailingクローズドパッケージ構文(最後のクローズドパッケージ)
閉じた式が最後のパラメータとして関数に渡されると、最後の閉じた式を使用して可読性を向上させることができます.上記の例は、次のように書くこともできます.
var nums = [1,9,2,8]

//    

sort(&nums){ num1,num2 -> Bool in  //in                 

    return num1 > num2

}

//    

sort(&nums){

    return $0 > $1

}

//

sort(&nums,>)

println(nums)//[9, 8, 2, 1]

たとえば、配列のフィルタリングは簡単に書くことができます.
var nums = [1,9,2,8]

var test = nums.filter { num -> Bool in

    return num%3 == 0//      3    

}

println(test)//[9]



var test = nums.filter {

    return $0%3 == 0//      3    

}