標籤:類型 筆記 func div develop 多個 value ret pre
看 Developing IOS 8 Apps with swift 的時候看到一些比較實用的點,記錄一下:
1、將函數作為參數傳遞。
比如:
寫一個兩個數求和的函數:performOperation(multiply)
func performOperation(operation:(Double,Double) -> Double) { if operandStack.count >= 2 { dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } } func multiply(op1: Double, op2: Double) -> Double { return op1 * op2 }以上。有更酷的實現,用閉包的方法:
改進為:
performOperation ({ (op1: Double, op2: Double) -> Double in return op1 * op2 }) func performOperation(operation:(Double,Double) -> Double) { if operandStack.count >= 2 { dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } }編譯器會依據上下文判斷類型。所以,以上的 performOperaion 又能夠簡化為:
performOperation ({ (op1, op2) in return op1 * op2 }) op1,op2 的類型能夠判斷,當然傳回型別也能夠判斷,故而傳回型別也可省去。甚至連 return 也能夠省去。
因為編譯器不強制你一定要寫形參,故這裡的 op1, op2 也能夠省去,用 $0, $1, $2, ...... 分別代表第一個第二第三個參數等等。
所以。上面又能夠再次簡化為:
performOperation ({ op1 * op2 })swift 的編譯器真 TMD 僅僅能,哈哈!
等等,還沒完,
再簡化為:
performOperation () { op1 * op2 }</span>有個條件,就是 op1 * op2 是作為最後一個參數傳遞的時候就能夠這樣做,把函數參數移到括弧外面,如上。
其它的,假設有另外的參數的話就能夠像之前的那樣放在括弧()裡面;假設僅僅有一個參數的話。括弧還能夠直接去掉。例如以下:
performOperation { op1 * op2 } 至此,簡化完成。
2、swift 支援多態,What an amazing !
比如。當你要求一個數的平方根的時候,而已還是想用回原來的函數 performOperation 。可是這個函數要求的形參是一個包括兩個 Double 類型的函數。求平方根僅僅須要傳入一個參數即可了啊,那麼來改造一下這個函數吧,在寫一個同名的函數 performOperation 。然後定義為僅僅須要一個形參就好了。
注意:swift 支援在一個類中同一時候存在同名的多個函數,形參不一樣就好了,就是多態啦~
那麼。再添加一個 performOperation 函數,例如以下:
func performOperation(operation: Double -> Double) { if operandStack.count >= 1 { dispalayValue = operation(operandStack.removeLast()) enter() } } 如今就能夠這樣調用來計算數值平方根了。
performOperation { sqrt($0) }
很多其它,能夠觀看《Developing IOS 8 Apps with Swift》的 More Xcode and Swift, MVC 一節。
swift 學習筆記一