swift中函數(shù)可變參數(shù)的使用

情景回顧(OC篇)
在使用oc開發(fā)的時(shí)候就接觸了函數(shù)可變參數(shù)的概念,用的最多的當(dāng)然是在創(chuàng)建UIAlertView和ActionSheet時(shí)。自己也曾定義過這樣的函數(shù)。然后取參的話使用的是 c函數(shù)中的這幾個(gè)宏:

void va_start(va_list arg_ptr, prev_param);
void va_arg(va_list arg_ptr, type);
void va_end(va_list arg_ptr);

使用過程如下:

-(int)add:(int)item, ...
{
    va_list list; //定義一個(gè)指向個(gè)數(shù)可變的參數(shù)列表的指針
    va_start(list, item); //得到一個(gè)可變參數(shù)的地址,第一個(gè)參數(shù)傳入列表指針,第二個(gè)參數(shù)傳入函數(shù)接收的第一個(gè)參數(shù)
    int result = 0;
    NSLog(@"第一個(gè)參數(shù):%d", item);
    result += item;
    int arg; //聲明一個(gè)中間值,用來接收遍歷可變參數(shù)列表時(shí),取出的參數(shù)
    while ((arg = va_arg(list, int))) { //得到列表中的下一個(gè)參數(shù),第一個(gè)參數(shù)傳入列表指針,第二個(gè)參數(shù)為此函數(shù)可變參數(shù)的類型。
        //循環(huán)的結(jié)束條件是arg不存在,即為nil
        NSLog(@"當(dāng)前參數(shù):%d" , arg);
        result+=arg;
    }
    va_end(list); //置空列表指針
    return result;
}
@end

在使用此類型的函數(shù)定義時(shí)需要熟悉va_start、va_arg和va_end等宏的使用。


swift篇
在swift里對于可變參數(shù)定義和使用變成了如下這樣:

func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}

在傳入的參數(shù)類型后邊加上...即聲明了該參數(shù)是可變長度的,而我們在取參的時(shí)候只需要將其當(dāng)成數(shù)組去處理,這似乎比oc省心了不少。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 我們在C語言編程中會遇到一些參數(shù)個(gè)數(shù)可變的函數(shù),例如printf() 這個(gè)函數(shù),它的定義是這樣的: int pri...
    Mr_Me閱讀 852評論 0 2
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,415評論 4 61
  • 關(guān)于心想生《自在人生》之神性創(chuàng)造精華筆記分享:轉(zhuǎn)帖 1. 看到一個(gè)信息,你馬上不舒服,你就開始評判了,不舒服...
    李恩億的書屋閱讀 407評論 0 0
  • 世界上最幸福的事情莫過于上班路上在通勤車上補(bǔ)覺了,而最郁悶的事情肯定是正神游四方的時(shí)候卻被吵醒,尤其是我這種有嚴(yán)重...
    三頁薄紙閱讀 1,084評論 5 8

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