Аргументы командной строки

Можно передать некоторые значения из командной строки в ваши программы Objective-C при их выполнении. Эти значения называютсяcommand line arguments и во многих случаях они важны для вашей программы, особенно когда вы хотите управлять своей программой извне, а не жестко кодировать эти значения внутри кода.

Аргументы командной строки обрабатываются с помощью аргументов функции 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");
   }
}

Когда приведенный выше код компилируется и выполняется с одним аргументом, скажем «тестирование», он дает следующий результат.

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 будет равным единице, в противном случае, если вы передадите один аргумент, тогда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.