Files
Nate Cook 0bac2cc0f1 Allow default nil values for optional properties (#480)
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.
2022-08-30 22:23:15 -05:00

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.

The output of the Repeat command, declared above.

Additional Resources

Topics

Essentials

Arguments, Options, and Flags

Property Customization

Custom Types

  • ExpressibleByArgument
  • EnumerableFlag

Validation and Errors

Shell Completion Scripts

Advanced Topics