2017-04-23 10 views
0

このコードでは、列挙型とその列挙型を使用し、後で辞書のスイッチを使用する辞書を作成しています。このスウィフトコードで何が起こるか

これは、スタンフォードCS193P電卓の授業の解決策です。列挙型のケースの1つにこのコードが含まれています。辞書の定義の

case binaryOperation(Double, Double) -> Double, (String, String) -> String 

1本である:

"*" : Operation.binaryOperation(*, {$0 + "*" + $1}) 

辞書は、加算、減算、および分割するための同様の定義を含みます。

この電卓はうまく動作します。正解が表示され、入力の説明も2行目に表示されます。私は正しい答えを計算していますが、わかりません。

2番目のパラメータから引数$ 0と$ 1を取り出し、最初のパラメータで使用する方法を知っていますか?

この質問は意味があると思います。私が示していないより多くのコードが含まれています。

+2

あなたは( 'ケースbinaryOperationを意味します(Double、Double) - > Double、(String、String) - > String) '、そうですか? (外側のかっこに注意してください)。 – Hamish

答えて

1

Operation.binaryOperation(*, {$0 + "*" + $1}) 第1のパラメータ(*)は関数であり、例えば次のようになります。この定義:
func *(x: Double, y: Double) -> Double ですので、上記の(Double, Double) -> Doubleの定義に準拠しています。

2番目のパラメータは、2つの匿名パラメータ$ 0と$ 1を使用するクロージャ(インライン関数)です(Swiftは(String, String) -> Stringの定義があるため、これらは文字列であることを認識しています)。

スワップでは、$ x構文を使用して、位置によってパラメータを指定できます。

あなたは 例えば{return $0 * $1}

または機能付きバージョンを減少さ{$0 * $1} は、インライン関数の最初のparametrを交換しようとすることができます: Operation.binaryOperation(multiply, {$0 + "*" + $1})

func multiply(x: Double, y: Double) -> Double { return x * y }

関連する問題