2016-06-15 42 views

答えて

1

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(<) 

は、これは明示的に私たち自身の閉鎖は、それを包み込むようにすることなく、機能(名前は閉鎖)に直接で<を渡します。他の人が言ったように、それはの省略形

+0

遊び場に何か問題があったと思います。それは働くようになった。ありがとう:) – Dershowitz123

0

演算子のオーバーロード:

func == (i : Int, j: Int) -> Bool { 
    return i == j 
} 

はそれと同等である必要があります。

+0

私は理解していないようです。それを私に説明してもらえますか? – Dershowitz123

1

これは実際にクロージャではなく、変数に格納された2つの整数を比較する等価演算子です。

すべての演算子は関数を使用して定義され、その関数を変数に割り当てることができます。それには何もありません。

+0

このテクニックを使って私ができることのデモンストレーションを私に見せてもらえますか?これをコードで使用することをお勧めしますか? – Dershowitz123

+0

それが動作するようになった。ありがとうございました。 :) – Dershowitz123

0

だ:右から左へ読む

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 } 

はスウィフトをお楽しみください:)

関連する問題