swift 多元組 (Tuple)

多元組是我們的新朋友,多嘗試使?這個(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容