Parsing della riga di comando in Swift con Swift Argument Parser

Mattepuffo's logo
Parsing della riga di comando in Swift con Swift Argument Parser

Parsing della riga di comando in Swift con Swift Argument Parser

Swift Argument Parser è un'ottima libreria per il parsing della riga di comando in Swift.

In pratica ci permette di avviare il nostro programma inviando degli argomenti.

La prima cosa è installare la libreria; questo il mio Package.swift:

// swift-tools-version: 6.2

import PackageDescription

let package = Package(
    name: "test_swift",
    dependencies: [
        .package(url: "https://github.com/apple/swift-argument-parser", from: "1.3.0")
    ],
    targets: [
        //.executableTarget(
        //  name: "test_swift"
        //),
        .executableTarget(
            name: "test_swift",
            dependencies: [
                .product(name: "ArgumentParser", package: "swift-argument-parser")
            ])
    ]
)

Il codice prevede un argomento obbligatorio, ed uno no ma con un controllo sull'eventuale valore:

import ArgumentParser
import Foundation

@main
struct test_swift: ParsableCommand {
    @Argument(help: "Il nome della persona")
    var nome: String

    @Option(name: .shortAndLong, help: "L'età della persona")
    var eta: Int?

    func validate() throws {
        if let eta = eta, eta <= 0 {
            throw ValidationError("L'età deve essere maggiore di zero")
        }
    }

    func run() throws {
        if let eta = eta {
            print("Ciao \(nome), hai \(eta) anni!")
        } else {
            print("Ciao \(nome)!")
        }
    }
}

Qui sotto un pò di esempi dopo ave fatto la build:

$ .build/debug/test_swift Mario
Ciao Mario!

$ .build/debug/test_swift Mario --eta 30
Ciao Mario, hai 30 anni!

$ .build/debug/test_swift Mario -e 30
Ciao Mario, hai 30 anni!

$ .build/debug/test_swift Mario -e 0
Error: L'età deve essere maggiore di zero
Usage: test_swift <nome> [--eta <eta>]
  See 'test_swift --help' for more information.
  
$ .build/debug/test_swift --help
USAGE: test_swift <nome> [--eta <eta>]

ARGUMENTS:
  <nome>                  Il nome della persona

OPTIONS:
  -e, --eta <eta>         L'età della persona
  -h, --help              Show help information.

Enjoy!


Condividi

Commentami!