iOS-可变参数(不定参数)的用法
簡介
一個可變參數函數是指一個函數擁有不定的參數,即為一個函數可接收多個參數。有時我們會遇到一些算術問題需要用到,比如是計算傳入參數的總和,字符串的連接或是其它操作過程,我們在 OC 里也經常使用,最經典的就是 NSLog( C 為 printf ) ,它可以指定格式的輸出,格式化輸出的內容。
舉個栗子?
新建一個類TestClass,寫一個類方法print:用于輸出我們傳入的值
類頭文件TestClass.h
#import <Foundation/Foundation.h>@interface TestClass : NSObject + (void)print:(NSString *)firstArg, ... NS_REQUIRES_NIL_TERMINATION; @end類實現TestClass.m
#import "TestClass.h"@implementation TestClass+ (void)print:(NSString *)firstArg, ... NS_REQUIRES_NIL_TERMINATION {if (firstArg) {// 取出第一個參數NSLog(@"%@", firstArg);// 定義一個指向個數可變的參數列表指針;va_list args;// 用于存放取出的參數NSString *arg;// 初始化變量剛定義的va_list變量,這個宏的第二個參數是第一個可變參數的前一個參數,是一個固定的參數va_start(args, firstArg);// 遍歷全部參數 va_arg返回可變的參數(a_arg的第二個參數是你要返回的參數的類型)while ((arg = va_arg(args, NSString *))) {NSLog(@"%@", arg);}// 清空參數列表,并置參數指針args無效va_end(args);} }@endva_list:用來保存宏 va_start 、va_arg 和 va_end 所需信息的一種類型。為了訪問變長參數列表中的參數,必須聲明 va_list 類型的一個對象。
va_start:訪問變長參數列表中的參數之前使用的宏,它初始化用va_list聲明的對象,初始化結果供宏va_arg和va_end使用;
va_arg:展開成一個表達式的宏,該表達式具有變長參數列表中下一個參數的值和類型。每次調用 va_arg 都會修改,用 va_list 聲明的對象從而使該對象指向參數列表中的下一個參數。
va_end:該宏使程序能夠從變長參數列表用宏 va_start 引用的函數中正常返回。
NS_REQUIRES_NIL_TERMINATION :是一個宏,用于編譯時非nil結尾的檢查。
試一試
在外部調用一個剛剛寫的方法
注意:
- 在可變參數里,所有參數均用逗號隔開
- 參數結尾必須加上nil,表示參數結束
看一下執行的結果,輸出了我們預期的值
參考:ios開發-Object-C可變參數函數
轉載于:https://www.cnblogs.com/lancely/p/5782798.html
總結
以上是生活随笔為你收集整理的iOS-可变参数(不定参数)的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCF——图像旋转201503-1
- 下一篇: 表单和框架