多元組是我們的新朋友迁客,多嘗試使?這個新特性吧闪唆,會讓?活輕松不少?
?如交換輸?涡贱,普通程序員亙古以來可能都是這么寫的
func swapMe<T>( a: inout T, b: inout T) {
let temp = a
a = b
b = temp
}
但是要是使?多元組的話,我們可以不使?額外空間就完成交換愕把,?下?就達到了?藝程序員的寫法:
func swapMe<T>( a: inout T, b: inout T) {
(a, b) = (b, a)
}
在 Objective-C 中有不少需要傳遞指針的地?拣凹,以前的錯誤處理 NSError 是個很好的例?森爽。但是在 Swift 2.0 中傳?指針的 NSError 已經(jīng)被新加?的異常機制取代的,所以我們在這?舉另?個例?來說明多元組的應?嚣镜。在 Objective-C 中 CGRect 有?個輔助?法叫做 CGRectDivide 爬迟,它?來將?個 CGRect 在?定位置切分成兩個區(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 系語?的單?返回,我們不得不通過傳?指針的?式讓?法來填充需要的部分捧请,可以說使?起來既不直觀凡涩,?很?煩。
?現(xiàn)在在 Swift 中疹蛉,這個?法搖??變活箕,使?了多元組的?式來同時返回被分割的部分和剩余部分:
func divided(atDistance: CGFloat, from fromEdge: CGRectEdge)
-> (slice: CGRect, remainder: CGRect)
然后使?的時候,對?之前的做法可款,現(xiàn)在就?常簡單并且易于理解了:
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let (_,_) = rect.divided(atDistance: 20, from: .minXEdge)