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?
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With