อาร์กิวเมนต์บรรทัดคำสั่ง

เป็นไปได้ที่จะส่งผ่านค่าบางอย่างจากบรรทัดคำสั่งไปยังโปรแกรม 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 ตั้งไว้ที่ 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.