CLInterface

此项目已存档。 我对 CLInterface 的成果感到满意;它的架构大量使用了反射来实现我想要的 API。不幸的是,在它发布后不久,苹果推出了自己的官方参数解析器库,它具有非常相似的接口。

Swift 5.1 时代的参数解析器

Swift 5.1 platforms: macOS, Linux Swift Package Manager compatible releases MIT license

CLInterface 协议应由一个类或结构体来实现,该类或结构体将表示程序的命令行界面。除了必需的 description 属性之外,它还应包含 @Argument@PositionalArgument 属性,用于您想要的任何参数。在您调用 parseArguments 后,它们将被自动设置。

支持可选参数和必需参数。使用 default: 和可选属性来获得您想要的行为。(例如,没有默认值的非可选属性将在 parseArguments 调用时抛出错误。)

使用 Swift 包管理器将其添加到您的项目中

        .package(url: "https://github.com/nikstar/CLInterface.git", from: "1.0.3"),

示例

final class Swiftc : CLInterface {
    var description = "Swift compiler"

    @Argument("--output", "-o", usage: "Write output to <file>")
    var outputPath: String?
    
    @Argument("-g", usage: "Emit debug info", default: false)
    var debugMode: Bool
    
    @PositionalArgument(name: "files", usage: "Files that will be compiled")
    var files: [String]
}

调用 parseArguments 后,您将能够像使用普通变量一样使用这些属性。

let swiftc = Swiftc()
try swiftc.parseArguments(["-o", "hello", "-g", "main.swift", "Greeter.swift"])

swiftc.outputPath // Optional("hello")
swiftc.debugMode // true
swiftc.files // ["main.swift", "Greeter.swift"]

swiftc -hswiftc --help 会打印使用信息

OVERVIEW: Swift compiler

OPTIONS:
--output, -o   Write output to <file>
-g             Emit debug info
--help         Display available options

POSITIONAL ARGUMENTS:
files          Files that will be compiled

请参阅ExampleSwiftc 以获取工作示例。

请参阅我的有声读物转换器 Opusab,以获取另一个真实示例