Читання аргументів командного рядка

Swift:
Читання аргументів командного рядка

Як це зробити:

Swift надає доступ до аргументів командного рядка через глобальний масив CommandLine.arguments. Ось приклад того, як прочитати і використати ці аргументи:

// Надрукуємо всі аргументи командного рядка
for argument in CommandLine.arguments {
    print(argument)
}

// Використання аргумента як частини інструкції
if CommandLine.arguments.contains("--verbose") {
    print("Verbose mode is on.")
}

// Робота з опціональними значеннями для аргументів, що містяться в парах key=value
let arguments = CommandLine.arguments.reduce(into: [String: String]()) { result, argument in
    let keyValue = argument.split(separator: "=").map(String.init)
    if keyValue.count == 2 {
        result[keyValue[0]] = keyValue[1]
    }
}

if let path = arguments["--file"] {
    print("File path provided: \(path)")
}

Якщо запустити програму з аргументом --file=example.txt, наше маленьке додаток виведе:

File path provided: example.txt

Поглиблено:

Історично, читання аргументів командного рядка було одним з основних способів взаємодії з користувацькими програмами. Це дає користувачам можливість запускати скрипти із заздалегідь визначеними налаштуваннями, автоматизувати завдання та інтегруватися з іншими інструментами.

У Swift альтернатив не так багато, як у більш старих мовах програмування, але можна використовувати сторонні бібліотеки, які надають більш складну обробку аргументів командного рядка, такі як SwiftArgumentParser. Вони можуть обробляти флаги, опції та надавати автоматично генеровані довідки.

Деталі імплементації зчитування аргументів зводяться до роботи з масивом рядків, які подані системою як вхідні дані. У реальних програмах важливо робити перевірку на помилки і переконатись, що аргументи, які користувач передає, є валідними.

Дивіться також:

Скористайтеся цими ресурсами для більш глибокого занурення у тему:

  • Бібліотека SwiftArgumentParser на GitHub
  • Розширений гайд по обробці командного рядка в Swift на raywenderlich.com