mirror of
https://github.com/apple/swift-argument-parser.git
synced 2026-06-06 20:18:23 +00:00
This adds underscored initializers that let library users add `= nil` to declarations of optional `@Option` and `@Argument` properties. Previously, default values have been available for properties of non-optional types only. These new initializers use `_OptionalNilComparisonType` as the wrapped value parameter, so only a `nil` literal is acceptable in the default value position. This avoids the problem of declaring an optional property with a non-`nil` default, which ends up negating the purpose of an optional.
2.1 KiB
2.1 KiB
ArgumentParser
Straightforward, type-safe argument parsing for Swift.
Overview
By using ArgumentParser, you can create a command-line interface tool
by declaring simple Swift types.
Begin by declaring a type that defines
the information that you need to collect from the command line.
Decorate each stored property with one of ArgumentParser's property wrappers,
declare conformance to ParsableCommand,
and implement your command's logic in its run() method.
import ArgumentParser
@main
struct Repeat: ParsableCommand {
@Argument(help: "The phrase to repeat.")
var phrase: String
@Option(help: "The number of times to repeat 'phrase'.")
var count: Int? = nil
mutating func run() throws {
let repeatCount = count ?? 2
for _ in 0..<repeatCount {
print(phrase)
}
}
}
When a user executes your command,
the ArgumentParser library parses the command-line arguments,
instantiates your command type,
and then either calls your run() method or exits with a useful message.
Additional Resources
Topics
Essentials
- doc:GettingStarted
ParsableCommandAsyncParsableCommand- doc:CommandsAndSubcommands
- doc:CustomizingCommandHelp
Arguments, Options, and Flags
- doc:DeclaringArguments
ArgumentOptionFlagOptionGroupParsableArguments
Property Customization
- doc:CustomizingHelp
ArgumentHelpArgumentVisibilityNameSpecification
Custom Types
ExpressibleByArgumentEnumerableFlag
Validation and Errors
- doc:Validation
ValidationErrorCleanExitExitCode
Shell Completion Scripts
- doc:InstallingCompletionScripts
- doc:CustomizingCompletions
CompletionKind
