Objective-C 命令行参数

当 Objective-C 程序执行时,可以将一些值从命令行传递给它们。这些值称为 命令行参数,很多时候它们对程序很重要,特别是当您希望从外部控制程序而不是在代码中硬编码这些值时。

命令行参数使用 main() 函数参数处理,其中 argc 表示传递的参数数量,argv[] 是指针数组,它指向传递给程序的每个参数。下面是一个简单的实例,它检查命令行是否提供了任何参数,并采取相应的操作:

  1. #import <Foundation/Foundation.h>
  2. int main( int argc, char *argv[] ) {
  3. if( argc == 2 ) {
  4. NSLog(@"The argument supplied is %s\n", argv[1]);
  5. } else if( argc > 2 ) {
  6. NSLog(@"Too many arguments supplied.\n");
  7. } else {
  8. NSLog(@"One argument expected.\n");
  9. }
  10. }

当用一个参数(比如 "testing")编译和执行上述代码时,它会产生以下结果:

  1. 2022-07-07 18:01:17.333 demo[7640] The argument supplied is testing

当使用两个参数(例如 testing1testing2)编译和执行上述代码时,它会产生以下结果:

  1. 2022-07-07 18:01:18.333 demo[7640] Too many arguments supplied.

当编译并执行上述代码而不传递任何参数时,将产生以下结果:

  1. 2022-07-07 18:01:18.333 demo[7640] One argument expected

需要注意的是,argv[0] 保存程序本身的名称,argv[1] 是指向提供的第一个命令行参数的指针,argv[n] 是最后一个参数。如果未提供参数,则 argc1,否则如果传递一个参数,则将 argc 设置为 *2

传递所有由空格分隔的命令行参数,但如果参数本身有空格,则可以通过将它们放在双引号 "" 或单引号 '' 中来传递此类参数。让我们再次重写上面的例子,在这里我们将打印程序名,并通过在双引号内输入命令行参数:

  1. #import <Foundation/Foundation.h>
  2. int main( int argc, char *argv[] ) {
  3. NSLog(@"Program name %s\n", argv[0]);
  4. if( argc == 2 ) {
  5. NSLog(@"The argument supplied is %s\n", argv[1]);
  6. } else if( argc > 2 ) {
  7. NSLog(@"Too many arguments supplied.\n");
  8. } else {
  9. NSLog(@"One argument expected.\n");
  10. }
  11. return 0;
  12. }

当上面的代码用一个由空格分隔的参数编译和执行时,在双引号中显示 "Testing1 Testing2",它会产生以下结果:

  1. 2022-07-07 06:36:59.081 main[71010] Program name main
  2. 2022-07-07 06:36:59.082 main[71010] One argument expected.