Objective-C 命令行参数
在执行 Objective-C 程序时,可以将一些值从命令行传递给它们。 这些值称为命令行参数,很多时候它们对您的程序很重要,尤其是当您想从外部控制程序而不是在代码中硬编码这些值时。
命令行参数使用 main() 函数参数处理,其中 argc 指传递的参数数量,argv[] 是指针数组,指向传递给程序的每个参数。 下面是一个简单的例子,它检查是否有任何从命令行提供的参数并采取相应的行动 −
#import <Foundation/Foundation.h> int main( int argc, char *argv[] ) { if( argc == 2 ) { NSLog(@"The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { NSLog(@"Too many arguments supplied.\n"); } else { NSLog(@"One argument expected.\n"); } }
当上面的代码用一个参数编译和执行时,比如"testing",它会产生以下结果。
2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing
当上面的代码用两个参数编译和执行时,比如 testing1 和 testing2,它会产生以下结果。
2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.
在不传递任何参数的情况下编译和执行上述代码时,会产生以下结果。
2013-09-13 03:01:18.333 demo[7640] One argument expected
应该注意的是,argv[0] 保存程序本身的名称,argv[1] 是指向提供的第一个命令行参数的指针, *argv[n] 是最后一个参数。如果没有提供参数,argc 将为 1,否则如果您传递一个参数,则 argc 设置为 2。
您传递所有由空格分隔的命令行参数,但如果参数本身有一个空格,那么您可以通过将它们放在双引号 "" 或单引号 '' 中来传递这些参数。 让我们再次重写上面的例子,我们将打印程序名称,我们还通过放入双引号来传递命令行参数 −
#import <Foundation/Foundation.h> int main( int argc, char *argv[] ) { NSLog(@"Program name %s\n", argv[0]); if( argc == 2 ) { NSLog(@"The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { NSLog(@"Too many arguments supplied.\n"); } else { NSLog(@"One argument expected.\n"); } return 0; }
当使用以空格分隔但双引号内为"Testing1 Testing2"的单个参数编译和执行上述代码时,它会产生以下结果。
2017-11-30 06:36:59.081 main[71010] Program name main 2017-11-30 06:36:59.082 main[71010] One argument expected.