Come posso accedere agli argomenti del programma in Swift?

C e derivati ​​hanno parametri argc e argv (e envp ) per le loro funzioni di entry point, ma Swift non ne ha uno corretto: il codice di livello superiore è solo codice e non ha parametri.

Come si può accedere all’equivalente di argc e argv in un programma Swift?

Processo è stato appena rinominato in CommandLine (dal momento che Swift 3.0 4 agosto snapshot)

 let arguments = CommandLine.arguments 

(per qualche motivo questo non è stato menzionato sul log delle modifiche )

Process.arguments è tuo amico!

Fortunatamente questo è molto più semplice e integrato: niente importazione, niente sporcarsi le mani di C, obiettivi o altro.

Considera questo, chiamiamolo args.swift :

Versione Swift 2 :

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

Versione Swift 3 :

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

Possiamo compilarlo ed eseguirlo in questo modo:

 $ 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 

Si noti che il primo argomento è il nome del programma, come ci si potrebbe aspettare.

Sembra che ogni argomento sia una stringa, come potresti anche aspettarti.

Spero molto che Process diventi più utile con Swift, ma al momento sembra solo darti gli argomenti. Il che è molto, se stai cercando di scrivere un programma pure-Swift.

Non appena la tua app è triggers, utilizzerei le informazioni sul processo:

 let args = NSProcessInfo.processInfo().arguments print(args) 

Niente di pericoloso lì, molto comodo.

Nota che devi import Foundation (o Cocoa / UIKit ).

Per Swift 3 puoi usare questo codice:

 let argc = CommandLine.argc let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer.self, capacity: Int(CommandLine.argc)) 

che è equivalente ai parametri argc e argv utilizzati nella funzione principale Objective-C:

 int main(int argc, char *argv[]) 

Per le versioni precedenti di Swift, è ansible utilizzare Process.argc e Process.unsafeArgv o C_ARGC e C_ARGV .

È ansible passare queste variabili alla funzione UIApplicationMain nell’app iOS:

Swift 3:

 let argc = CommandLine.argc let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer.self, capacity: Int(CommandLine.argc)) UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.self)) 

versioni precedenti di Swift:

 UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate.self)) 

o:

 UIApplicationMain(C_ARGC, C_ARGC, nil, NSStringFromClass(AppDelegate.self)) 

Objective-C:

 int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 
  import Foundation println(C_ARGC) //CInt println(C_ARGV) // CString 

Come nel codice precedente, puoi usare C_ARGC per ottenere il numero di argomenti. C_ARGV per ottenere questi argomenti.