Comment accéder aux arguments de ligne de commande pour une application en ligne de commande en Swift ?
Si vous voulez un tableau, cette construction est très pratique. let args = [String](Process.arguments)
Comment accéder aux arguments de ligne de commande pour une application en ligne de commande en Swift ?
Mise à jour 01/17/17 : Mise à jour de l'exemple pour Swift 3. Process
a été renommé en CommandLine
.
Mise à jour 09/30/2015 : Mise à jour de l'exemple pour fonctionner en Swift 2.
Il est possible de le faire sans la Fondation. ou C_ARGV
y C_ARGC
.
La bibliothèque standard de Swift contient une structure CommandLine
qui dispose d'une collection de String
s appelé arguments
. Vous pourriez donc passer à des arguments comme celui-ci :
for argument in CommandLine.arguments {
switch argument {
case "arg1":
print("first argument")
case "arg2":
print("second argument")
default:
print("an argument")
}
}
Si vous voulez un tableau, cette construction est très pratique. let args = [String](Process.arguments)
@AlbinStigo Process.arguments est déjà un tableau de chaînes de caractères, pas besoin d'en créer un nouveau.
Utiliser les constantes de premier niveau C_ARGC
y C_ARGV
.
for i in 1..C_ARGC {
let index = Int(i);
let arg = String.fromCString(C_ARGV[index])
switch arg {
case "this":
println("this yo");
case "that":
println("that yo")
default:
println("dunno bro")
}
}
Notez que j'utilise l'intervalle de 1..C_ARGC
car le premier élément du C_ARGV
"array" est le chemin de l'application.
El C_ARGV
n'est pas réellement un tableau mais elle peut être sous-scrite comme un tableau.
NSProcessInfo nécessite Foundation. Ma réponse ne nécessite pas Foundation. Elle utilise simplement la librairie standard de Swift Lang.
Apple a publié le ArgumentParser
bibliothèque pour faire cela :
Nous avons le plaisir d'annoncer
ArgumentParser
Swift, une nouvelle bibliothèque open-source qui rend simple - et même agréable ! - d'analyser les arguments de la ligne de commande en Swift.
https://github.com/apple/swift-argument-parser
Commencez par déclarer un type qui définit les informations que vous devez collecter à partir de la ligne de commande. Décorez chaque propriété stockée avec l'un des éléments suivants
ArgumentParser
et déclarent leur conformité à la normeParsableCommand
.El
ArgumentParser
analyse les arguments de la ligne de commande, instancie votre type de commande, puis exécute votre commande personnalisée.run()
ou se termine par un message utile.
Tous ceux qui veulent utiliser l'ancien "getopt" (qui est disponible en Swift) peuvent l'utiliser comme référence. J'ai fait un portage en Swift de l'exemple GNU en C que l'on peut trouver à l'adresse suivante :
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
avec une description complète. Il est testé et entièrement fonctionnel. Il ne nécessite pas non plus de fondation.
var aFlag = 0
var bFlag = 0
var cValue = String()
let pattern = "abc:"
var buffer = Array(pattern.utf8).map { Int8($0) }
while true {
let option = Int(getopt(C_ARGC, C_ARGV, buffer))
if option == -1 {
break
}
switch "\(UnicodeScalar(option))"
{
case "a":
aFlag = 1
println("Option -a")
case "b":
bFlag = 1
println("Option -b")
case "c":
cValue = String.fromCString(optarg)!
println("Option -c \(cValue)")
case "?":
let charOption = "\(UnicodeScalar(Int(optopt)))"
if charOption == "c" {
println("Option '\(charOption)' requires an argument.")
} else {
println("Unknown option '\(charOption)'.")
}
exit(1)
default:
abort()
}
}
println("aflag ='\(aFlag)', bflag = '\(bFlag)' cvalue = '\(cValue)'")
for index in optind..<C_ARGC {
println("Non-option argument '\(String.fromCString(C_ARGV[Int(index)])!)'")
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Duplicata possible de Comment accéder aux arguments d'un programme en Swift ?