2017-04-23 29 views
0

我正在查看這段代碼,它創建了一個enum和一個使用枚舉的字典,後來在字典上開關了一個開關。在這個Swift代碼中會發生什麼

這是從斯坦福大學CS193P計算器課程的解決方案。枚舉中的其中一種情況包含此代碼。

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

在字典中的定義之一是這樣的:

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

字典包含加,減,和分割相似的定義。

這個計算器工作正常。顯示正確的答案,並在第二行中顯示輸入的說明。我不確定它是否正在計算正確的答案。

swift如何知道從第二個參數中取參數$ 0和$ 1並在第一個參數中使用它們?

我希望這個問題有道理。還有更多的代碼涉及我沒有顯示。

+2

你的意思是'的情況下binaryOperation( (Double,Double) - > Double,(String,String) - > String)',對嗎? (注意外括號)。 – Hamish

回答

1

Operation.binaryOperation(*, {$0 + "*" + $1}) 第一個參數(*)是一個函數,例如,這個定義:
func *(x: Double, y: Double) -> Double 所以它符合上面的(Double, Double) -> Double定義。

第二個參數是閉包(內嵌函數),它使用兩個匿名參數$ 0和$ 1(Swift知道這些是字符串,因爲有(String, String) -> String定義),並返回字符串。

在swift中,可以使用$ x語法來按位置處理參數。

你可以嘗試更換與內聯函數的第一個parametr 如{$0 * $1} 其減少的{return $0 * $1}

或用功能版本: Operation.binaryOperation(multiply, {$0 + "*" + $1})

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

相關問題