RawDog 是一个 Swift 库,它通过算术运算扩展了 RawRepresentable 类型。它定义了两个协议和一个枚举,用于处理具有可能失败的初始化器和不会失败的初始化器的类型的算术。
该库已通过全面测试,代码覆盖率达 100%
要使用 Swift Package Manager 将 RawDog 添加到你的项目中,请在你的 Package.swift 文件中添加以下依赖项
dependencies: [
.package(url: "https://github.com/ChristianFox/RawDog.git", from: "1.0.0")
]
不要忘记将 RawDog 添加到你的目标依赖项中
targets: [
.target(
name: "YourTarget",
dependencies: ["RawDog"]),
]
要使用 RawDog,请使你的 RawRepresentable 类型遵循 ArithmeticForFallibleType
或 ArithmeticForInfallibleType
协议,具体取决于你的类型是否具有可能失败或不会失败的初始化器。
这是一个结构体的示例,该结构体表示具有原始值的 SISeconds(基于 Dave DeLong 的 Time,这是该库的灵感来源),并遵循 ArithmeticForInfallibleType
协议
import RawDog
struct SISeconds: RawRepresentable, ArithmeticForInfallibleType {
let rawValue: Double
init(rawValue: Double) {
self.rawValue = rawValue
}
}
只需遵循 ArithmeticForInfallibleType
协议,你现在就可以执行以下任何操作
var a = SISeconds(rawValue: 60)
let b = SISeconds(rawValue: 3600)
let c = a + b // 3660
let d = a - b // 60
let e = a * b // 216000
let f = a / b // 60
a += b // 3660
a -= b // 60
a *= b // 216000
a /= b // 60
let aDouble = 2.0
let g = a ~+ aDouble // 62
let h = a ~- aDouble // 60
let i = a ~* aDouble // 120
let j = a ~/ aDouble // 60
a ~+= aDouble // 62
a ~-= aDouble // 60
a ~*= aDouble // 120
a ~/= aDouble // 60
请 提出 issue 以获得支持。
欢迎提交 Pull Request。我欢迎所有技能水平的开发者帮助改进该库、修复错误或添加新功能。
对于重大更改,请先提出 issue 以讨论你想要更改的内容。
在提交 Pull Request 之前,请确保你的代码符合现有的代码风格和约定,并且所有测试均通过。此外,如果你要添加新功能,请务必包含单元测试以验证行为。
如果你有任何问题或需要帮助,请随时 提出 issue,我将尽力帮助你。
RawDog 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。