Wie greifen Sie in Swift auf Befehlszeilenargumente für eine Befehlszeilenanwendung zu?
macos
command-line-arguments
swift
Anthony Mittaz
quelle
quelle
Antworten:
Apple hat die
ArgumentParser
Bibliothek dafür veröffentlicht:Schneller Argument-Parser
https://github.com/apple/swift-argument-parser
quelle
Update 17.01.17: Das Beispiel für Swift 3
Process
wurde aktualisiert und in umbenanntCommandLine
.Update 30.09.2015: Das Beispiel wurde aktualisiert, um in Swift 2 zu funktionieren.
Es ist tatsächlich möglich, dies ohne Foundation oder
C_ARGV
und zu tunC_ARGC
.Die Swift-Standardbibliothek enthält eine Struktur
CommandLine
mit einer Sammlung vonString
s namensarguments
. Sie können also folgende Argumente aktivieren:quelle
Process.arguments
das gleiche wieNSProcessInfo.processInfo().arguments
?Process
Objekt jetzt alsCommandLine
Objekt bezeichnet. Dies wird wahrscheinlich vollständig integriert sein, sobald Swift 3.0 offiziell veröffentlicht ist.Verwenden Sie in Swift 3
CommandLine
Enum anstelle vonProcess
So:
quelle
Verwenden Sie die Konstanten der obersten Ebene
C_ARGC
undC_ARGV
.Beachten Sie, dass ich den Bereich von verwende,
1..C_ARGC
da das erste Element desC_ARGV
"Arrays" der Pfad der Anwendung ist.Die
C_ARGV
Variable ist eigentlich kein Array, kann aber wie ein Array subskriptiert werden.quelle
C_ARCG
scheint nicht mehr unterstützt zu werden.Process.argc
undProcess.arguments
dafür verwenden, obwohl es so aussieht, als würde sich dies zuCommandLine.argc
undCommandLine.arguments
mit den letzten Änderungen an der Sprache ändern.Jeder, der das alte "getopt" (das in Swift verfügbar ist) verwenden möchte, kann dies als Referenz verwenden. Ich habe einen Swift-Port des GNU-Beispiels in C erstellt, das unter folgender Adresse zu finden ist:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
mit einer vollständigen Beschreibung. Es ist getestet und voll funktionsfähig. Es erfordert auch keine Foundation.
quelle
Sie können mithilfe des
CommandLine.arguments
Arrays einen Argumentparser erstellen und eine beliebige Logik hinzufügen.Sie können es testen. Erstellen Sie eine Datei
arguments.swift
Kompilieren Sie es und führen Sie es aus:
Das Problem beim Erstellen eines eigenen Argumentparsers besteht darin, alle Befehlszeilenargumentkonventionen zu berücksichtigen. Ich würde empfehlen, einen vorhandenen Argument-Parser zu verwenden.
Du könntest benutzen:
Ich habe darüber geschrieben, wie man Befehlszeilen-Tools für alle drei erstellt. Sie sollten sie ausprobieren und entscheiden, welcher Stil am besten zu Ihnen passt.
Wenn Sie hier interessiert sind, sind die Links:
quelle