Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access program arguments in Swift?

C and derivatives have argc and argv (and envp) parameters to their entry point functions, but Swift doesn't have one proper: top-level code is just code and it doesn't have parameters.

How can one access the equivalent of argc and argv in a Swift program?

like image 756
zneak Avatar asked Jun 03 '14 07:06

zneak


2 Answers

Process was just renamed into CommandLine (since Swift 3.0 August 4 snapshot)

let arguments = CommandLine.arguments 

(for some reason this wasn't mentioned on the changelog)

like image 65
ambientlight Avatar answered Oct 04 '22 00:10

ambientlight


Process.arguments is your friend!

Fortunately this is much easier, and built in: no importing anything, no getting your hands dirty with C, objective or otherwise.

Consider this, let's call it args.swift:

Swift 2 version:

var c = 0; for arg in Process.arguments {     println("argument \(c) is: \(arg)")     c++ } 

Swift 3 version:

var c = 0; for arg in CommandLine.arguments {     print("argument \(c) is: \(arg)")     c += 1 } 

We can compile and run it like this:

$ swift -o args args.swift && ./args fee fi fo fum argument 0 is: ./args argument 1 is: fee argument 2 is: fi argument 3 is: fo argument 4 is: fum 

Note that the first argument is the program name, as you might expect.

It seems every argument is a String, as you might also expect.

I hope very much that Process becomes more useful as Swift matures, but right now it seems to only give you the arguments. Which is a lot, if you're trying to write a pure-Swift program.

like image 22
Kevin Frost Avatar answered Oct 03 '22 23:10

Kevin Frost