多元組是我們的新朋友,多嘗試使?這個(gè)新特性吧,會(huì)讓?活輕松不少?
?如交換輸?,普通程序員亙古以來(lái)可能都是這么寫(xiě)的
func swapMe<T>( a: inout T, b: inout T) {
let temp = a
a = b
b = temp
}
但是要是使?多元組的話,我們可以不使?額外空間就完成交換,?下?就達(dá)到了?藝程序員的寫(xiě)法:
func swapMe<T>( a: inout T, b: inout T) {
(a, b) = (b, a)
}
在 Objective-C 中有不少需要傳遞指針的地?,以前的錯(cuò)誤處理 NSError 是個(gè)很好的例?。但是在 Swift 2.0 中傳?指針的 NSError 已經(jīng)被新加?的異常機(jī)制取代的,所以我們?cè)谶@?舉另?個(gè)例?來(lái)說(shuō)明多元組的應(yīng)?。在 Objective-C 中 CGRect 有?個(gè)輔助?法叫做 CGRectDivide ,它?來(lái)將?個(gè) CGRect 在?定位置切分成兩個(gè)區(qū)域。具體定義和?法如下:
/*
CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,
CGFloat amount, CGRectEdge edge)
*/
CGRect rect = CGRectMake(0, 0, 100, 100);
CGRect small;
CGRect large;
CGRectDivide(rect, &small, &large, 20, CGRectMinXEdge);
上?的代碼將 {0,0,100,100} 的 rect 分割為兩部分,分別是 {0,0,20,100} 的 small 和{20,0,80,100} 的 large 。由于 C 系語(yǔ)?的單?返回,我們不得不通過(guò)傳?指針的?式讓?法來(lái)填充需要的部分,可以說(shuō)使?起來(lái)既不直觀,?很?煩。
?現(xiàn)在在 Swift 中,這個(gè)?法搖??變,使?了多元組的?式來(lái)同時(shí)返回被分割的部分和剩余部分:
func divided(atDistance: CGFloat, from fromEdge: CGRectEdge)
-> (slice: CGRect, remainder: CGRect)
然后使?的時(shí)候,對(duì)?之前的做法,現(xiàn)在就?常簡(jiǎn)單并且易于理解了:
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let (_,_) = rect.divided(atDistance: 20, from: .minXEdge)