は究極の閉鎖 最後に、超倹約のために次のことが無駄にせずにバイトがあり、Hereこのタイプのクロージャーはどういう意味ですか、どのように機能しますか?
からそれを手に入れました。
let testEquality9 : (Int, Int) -> Bool = (==)
は究極の閉鎖 最後に、超倹約のために次のことが無駄にせずにバイトがあり、Hereこのタイプのクロージャーはどういう意味ですか、どのように機能しますか?
からそれを手に入れました。
let testEquality9 : (Int, Int) -> Bool = (==)
func
キーワードでデカールされた機能は、名前付きのクロージャです。 ==
はそのような名前付き関数の例です。 2 Int
の引数をとり、それらが等しいかどうかを示すBool
を返します。タイプは(Int, Int) -> Bool
です。testEquality9は、タイプ(Int, Int) -> Bool
です。これには、==
関数の終了が割り当てられます。
このように呼び出すことができます。
testEquality9(1, 2) // false
testEquality9(1, 1) // true
これから描画するための重要なことは、関数が実際には閉鎖されているということですので、彼らが閉鎖を使用することができ、どこでも使用することができます。
あなたはint型の配列をソートしたい場合たとえば、あなたが使用できます。
let ints = [3, 1, 4, 2]
let sorted = ints.sort{$0 < $1}
sort(_:)
メソッドは、型(Int, Int) -> Bool
のだクロージャをとります。閉包{$ 0 < $ 1}には2 Int
個のパラメータがあり、Bool
を返します。それはその署名に合っています。
ただし、このコードを短縮することができます。 <
オペレータの機能は、すでに(Int, Int) -> Bool
を入力しているので、我々はこれを書くことができます。
let sorted = ints.sort(<)
は、これは明示的に私たち自身の閉鎖は、それを包み込むようにすることなく、機能(名前は閉鎖)に直接で<
を渡します。他の人が言ったように、それはの省略形
演算子のオーバーロード:
func == (i : Int, j: Int) -> Bool {
return i == j
}
はそれと同等である必要があります。
私は理解していないようです。それを私に説明してもらえますか? – Dershowitz123
これは実際にクロージャではなく、変数に格納された2つの整数を比較する等価演算子です。
すべての演算子は関数を使用して定義され、その関数を変数に割り当てることができます。それには何もありません。
このテクニックを使って私ができることのデモンストレーションを私に見せてもらえますか?これをコードで使用することをお勧めしますか? – Dershowitz123
それが動作するようになった。ありがとうございました。 :) – Dershowitz123
だ:右から左へ読む
let testEquality9: (Int, Int) -> Bool = { (a: Int, b: Int) -> Bool in return a == b }
、それは2つのintを比較し、一定testEquality9に割り当て関数を作成します。
あなたが精神的に3枚を分離する必要があります。
定数名:
let testEquality9
定数型(それは関数型です):
(Int, Int) -> Bool
とに割り当てられた値を定数:
(==)
OR、長いバージョン:
{ (a: Int, b: Int) -> Bool in return a == b }
はスウィフトをお楽しみください:)
遊び場に何か問題があったと思います。それは働くようになった。ありがとう:) – Dershowitz123