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");
       }
    }
    
    当使用单个参数编译并执行上述代码时,例如说“测试”,它将产生以下结果。-
    
    2020-09-13 03:01:17.333 test[7640] The argument supplied is testing
    
    当上面的代码使用两个参数(即testing1和testing2)编译并执行时,将产生以下结果。
    
    2020-09-13 03:01:18.333 test[7640] Too many arguments supplied.
    
    在不传递任何参数的情况下编译和执行上述代码时,将产生以下结果。
    
    2020-09-13 03:01:18.333 test[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”表示,它将产生以下结果。-
    
    2020-11-30 06:36:59.081 test[71010] Program name main
    2020-11-30 06:36:59.082 test[71010] One argument expected.