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!
swift swift-argument-parser
Commentami!