Как получить доступ к аргументам командной строки для приложения командной строки в Swift?
macos
command-line-arguments
swift
Энтони Миттаз
источник
источник
Ответы:
Apple выпустила
ArgumentParser
библиотеку именно для этого:Быстрый синтаксический анализатор аргументов
https://github.com/apple/swift-argument-parser
источник
Обновление 17.01.17: Обновленный пример для Swift 3.
Process
был переименован вCommandLine
.Обновление 30.09.2015: обновлен пример для работы в Swift 2.
На самом деле это возможно сделать без Foundation или
C_ARGV
иC_ARGC
.Стандартная библиотека Swift содержит структуру,
CommandLine
которая имеет наборString
именarguments
. Итак, вы можете включить такие аргументы:источник
Process.arguments
же, какNSProcessInfo.processInfo().arguments
?Process
объект теперь известен какCommandLine
объект. Вероятно, это будет полностью включено после официального выпуска Swift 3.0.В Swift 3 используйте
CommandLine
enum вместоProcess
Так:
источник
Используйте константы верхнего уровня
C_ARGC
иC_ARGV
.Обратите внимание, что я использую диапазон,
1..C_ARGC
потому что первый элементC_ARGV
«массива» - это путь к приложению.C_ARGV
Переменный фактически не является массив , но суб-скриптов как массив.источник
C_ARCG
похоже, больше не поддерживается.Process.argc
иProcess.arguments
для этого, хотя похоже, что это может быть изменено наCommandLine.argc
иCommandLine.arguments
с самыми последними изменениями языка.Любой, кто хочет использовать старый "getopt" (который доступен в Swift), может использовать его как ссылку. Я сделал Swift-порт примера GNU на C, который можно найти по адресу:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
с полным описанием. Он протестирован и полностью работоспособен. Также не требуется Foundation.
источник
Вы можете создать парсер аргументов, используя
CommandLine.arguments
массив и добавить любую логику, которая вам нравится.Вы можете это проверить. Создать файл
arguments.swift
скомпилируйте и запустите:
Проблема с созданием собственного анализатора аргументов заключается в учете всех соглашений об аргументах командной строки. Я бы рекомендовал использовать существующий парсер аргументов.
Вы можете использовать:
Я писал о том, как создавать инструменты командной строки для всех трех. Вы должны проверить их и решить, какой стиль вам больше подходит.
Если вам интересно, вот ссылки:
источник