此项目已存档。 我对 CLInterface 的成果感到满意;它的架构大量使用了反射来实现我想要的 API。不幸的是,在它发布后不久,苹果推出了自己的官方参数解析器库,它具有非常相似的接口。
Swift 5.1 时代的参数解析器
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 -h
或 swiftc --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,以获取另一个真实示例。