Como você acessa argumentos de linha de comando para um aplicativo de linha de comando em Swift?
macos
command-line-arguments
swift
Anthony Mittaz
fonte
fonte
Respostas:
A Apple lançou a
ArgumentParser
biblioteca para fazer exatamente isso:Swift Argument Parser
https://github.com/apple/swift-argument-parser
fonte
Atualização 17/01/17: Atualizado o exemplo para Swift 3.
Process
foi renomeado paraCommandLine
.Atualização 30/09/2015: Atualizado o exemplo para funcionar no Swift 2.
Na verdade, é possível fazer isso sem Foundation ou
C_ARGV
eC_ARGC
.A biblioteca padrão do Swift contém uma estrutura
CommandLine
que possui uma coleção deString
s chamadosarguments
. Portanto, você pode ativar argumentos como este:fonte
Process.arguments
o mesmo queNSProcessInfo.processInfo().arguments
?Process
objeto agora é conhecido como oCommandLine
objeto. Isso provavelmente será totalmente incorporado quando o Swift 3.0 for oficialmente lançado.No Swift 3, use
CommandLine
enum em vez deProcess
Assim:
fonte
Use as constantes de nível superior
C_ARGC
eC_ARGV
.Observe que estou usando o intervalo de
1..C_ARGC
porque o primeiro elemento daC_ARGV
"matriz" é o caminho do aplicativo.A
C_ARGV
variável não é realmente uma matriz, mas pode ser submetida a scripts como uma matriz.fonte
C_ARCG
parece não ser mais compatível.Process.argc
eProcess.arguments
para isso, embora pareça que isso possa estar mudando paraCommandLine.argc
eCommandLine.arguments
com as alterações mais recentes do idioma.Quem quiser usar o antigo "getopt" (que está disponível no Swift) pode usá-lo como referência. Fiz um porte Swift do exemplo GNU em C que pode ser encontrado em:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
com uma descrição completa. É testado e totalmente funcional. Também não requer Fundação.
fonte
Você pode criar um analisador de argumento usando o
CommandLine.arguments
Array e adicionar qualquer lógica que desejar.Você pode testar. Crie um arquivo
arguments.swift
compile e execute:
O problema de você construir seu próprio analisador de argumento é levar em consideração todas as convenções de argumento da linha de comando. Eu recomendaria usar um Argument Parser existente.
Você pode usar:
Eu escrevi sobre como construir ferramentas de linha de comando em todos os três. Você deve verificá-los e decidir qual estilo se adapta melhor a você.
Se você estiver interessado, aqui estão os links:
fonte