Swift 可變引數

2021-09-16 23:50:39 字數 1723 閱讀 7302

使用可變引數,其實很簡單。就是在引數型別加上。比如int…。實際上,方法內部去呼叫該引數的話,xcode提示的是[int]。也就是乙個array。這樣也是大大方便。不用非得去宣告乙個[int]

小二。。上**~~~

// 多數字相加

func add(_ values: int...) -> int

}print(add(1,5,8,9))

// 23

再比如,可以封裝乙個uialertcontroller。如果覺得每次得寫一大堆alert.addaction()巴拉巴拉.

extension uialertcontroller ))

}if style == .actionsheet

vc?.present(alertcontroller, animated: true, completion: nil)

}}// 使用

uialertcontroller.show(self, title: "alert", msg: "show alert", style: .alert, btns: "previous", "next")

不過,可變引數無法用於objective-c中。

objective-c如果要使用可變引數。那麼需要使用到va_list等系列c函式

小二,繼續上**~~~

- (nsstring *)add:(nsstring *)value, ... ns_requires_nil_termination 

// 記得清空

va_end(values);

}return result;

}

使用va_start這個巨集,會從value的指標位址開始,乙個乙個的去取值。對於非指標的話,那麼就無法實現。至於 方法名後面的ns_requires_nil_termination,則是在方法呼叫的時候,加上nil作為終結。因為如果沒有nil的話,那麼也是會導致 不停的取值,於是,拿到未初始化的記憶體空間後,就導致崩潰啦。boom....

寫完這個方法後,只能感嘆下swift封裝的太好了。很方便的...語法,加上高階函式的使用。貌似也不太算很公正的對比。(逃。

func add(_ values: string...) -> string 

}

這樣幾行**,就已經實現了上述objective-c寫的方法了。

寫這篇的根源,其實是在翻(gen)看(ben)swift(jiu)的(bu)官(zhi)方(dao)文(de)檔(shuo)。於是看到可變引數這玩意了。後來想想,objective-cnsarrayuialertview等,其實也是基於這樣去寫的。

算是又明白了一些。但願不太遲。

哭瞎了。。。

swift定義引數個數可變的函式

在oc中,當乙個功能豐富的類對外暴露介面時,在.件中往往會提供一系列的api,引數由少到多。但是在.m檔案的實現中,往往都是利用乙個通用的實現。例如 宣告 int addnuma int numa numb int numb int addnuma int numa numb int numb nu...

可變引數列印 解析可變引數

1.的一般用法 define str s s define cons a,b int a e b int main 2.接受,列印可變引數 參考 glibc庫的bebug函式 define printf fmt,args.printf fmt,args 使用方法 define pr debug fm...

Swift 系統學習 12 可變長引數函式

playground noun a place where people can play import uikit 本節主要內容 1.可變長引數 2.函式形參的性質 3.函式型別function type 4.函式型別作為其他函式引數 5.函式型別作為其他函式的返回值 print hello wo...