# Swift 柯里化(Currying)
在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術。這個技術由 Christopher Strachey 以邏輯學家哈斯凱爾·加里命名的,盡管它是 Moses Sch?nfinkel 和 戈特洛布·弗雷格 發明的。
------[維基百科](http://zh.wikipedia.org/wiki/Currying)
Swift支持將方法柯里化,類似于批量創建某個帶有固定參數的方法,就像下面這個例子,用Swift做個簡單的加法運算:
~~~
func?sum(a:?Int,b:?Int) ->?Int?{
? ??return?a + b
}
sum(1,?2) ??//輸出3
~~~
創建一個柯里化的方法很容易,雖然看起來似乎和我們以前寫的方法不太一樣,但大體來說是相似的:

參數列表的每個參數都用單獨的圓括號括起來,其他部分都和以前一樣,把上面那個簡單的Swift標準方法改成柯里化之后就像這樣:
~~~
func?sum(a:?Int)(b:?Int) ->?Int?{
? ??return?a + b
}
var?sumByFirst =?sum(1)
sumByFirst(b:?4)?//輸出5
~~~
只需要傳入第一個參數,返回的sumByFirst是一個函數,它包含剩余的其他參數,以及剛剛傳入進去的那個1,接著以它自己作為方法傳入第二個參數b就行了。
如果是三個參數就像這樣:?
~~~
func?sum(a:?Int)(b:?Int)(c:?Int) ->?Int?{
? ??return?a + b + c
}
var?sumByFirst =?sum(1)
var?sumBySecond =?sumByFirst(b:?4)
sumBySecond(c:?10)??//輸出15
~~~
除了第一個參數以外,其他的參數都要顯式地寫上參數標簽,并且要按參數排列的順序調用。
一個括號中放兩個參數也可以:?
~~~
func?sum(a:?Int)(b:?Int, c:?Int) ->?Int?{
? ??return?a + b + c
}
var?sumByFirst =?sum(1)
sumByFirst(b:?4,c:?10)??//輸出15
~~~
在某些情況下,你可能會用某個相同的參數重復調用某個方法,那么利用柯里化會使代碼更易于維護:
~~~
func?sum(a:?Int)(b:?Int) ->?Int?{
? ??return?a + b
}
var?sumWithFive =?sum(5)
sumWithFive(b:?5)
sumWithFive(b:?10)
sumWithFive(b:?15)
~~~
- 前言
- iOS 自定義頁面的切換動畫與交互動畫 By Swift
- Swift 元組(Tuples)介紹
- Swift 可選值(Optional Values)介紹
- Swift Switch介紹
- Swift 值類型和引用類型
- Swift 柯里化(Currying)
- iOS GCD使用指南
- iOS8 Core Image In Swift:自動改善圖像以及內置濾鏡的使用
- 讓Xcode自動更新Build版本
- Swift 全功能的繪圖板開發
- Swift Nullability and Objective-C
- Swift Core Data 圖片存儲與讀取Demo
- Swift 繪圖板功能完善以及終極優化
- 如何設計一個 iOS 控件?(iOS 控件完全解析)