macos - swift command line



Comment accéder aux arguments de la ligne de commande dans Swift? (3)

Dans Swift 3, utilisez CommandLine enum au lieu de Process

Alors:

let arguments = CommandLine.arguments

https://src-bin.com

Comment accéder aux arguments de ligne de commande pour une application de ligne de commande dans Swift?


Answer #1

Quiconque veut utiliser l'ancien "getopt" (qui est disponible dans Swift) peut l'utiliser comme référence. J'ai fait un portage rapide de l'exemple GNU en C que l'on peut trouver sur:

http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html

avec une description complète. C'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)])!)'")
}

Answer #2

Utilisez les constantes de niveau supérieur C_ARGC et 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 la plage de 1..C_ARGC parce que le premier élément du "tableau" C_ARGV est le chemin de l'application.

La variable C_ARGV n'est pas réellement un tableau mais est sous-scriptable comme un tableau.





swift