Resistance(电阻)是一个 Swift 库,用于创建和操作电阻及其值。它的设计易于使用,同时仍提供丰富的功能,包括:
最基本也是你可能最常做的事情是创建一个电阻。BandedResistor
(色环电阻)使用结构体表示,具有用于 Digit
(数字)、Multiplier
(倍率)和 Tolerance
(容差)环的属性。这些属性分别由枚举表示,并在初始化期间传入。以下演示了创建新电阻类型是多么简单。
let fourBand1 = FourBandResistor(digit1: .brown, digit2: .black, multiplier: .red, tolerance: .gold)
let fiveBand1 = FiveBandResistor(digit1: .brown, digit2: .black, digit3: .black, multiplier: .brown, tolerance: .gold)
let sixBand1 = SixBandResistor(digit1: .brown, digit2: .black, digit3: .black, multiplier: .brown, tolerance: .gold, coefficient: .brown)
所有色环电阻类型都采用 BandedResistor
协议,这意味着它们都公开了其 multiplier
(倍率)和 tolerance
(容差)值的属性,以及包含其有效 digit
(数字)的数组。 此外,还有一个用于电阻值的计算属性。
let fourBand = FourBandResistor(digit1: .green, digit2: .blue, multiplier: .red, tolerance: .gold)
let resistanceValue = fourBand.value // 5600
print(fourBand.digits) // [green, blue]
print(fourBand.multiplier) // red
print(fourBand.tolerance) // gold
let sixBand = SixBandResistor(digit1: .blue, digit2: .grey, digit3: .red, multiplier: .red, tolerance: .gold, coefficient: .brown)
print(sixBand.coefficient) // brown
print(fourBand.digits.map(\.rawValue)) // [5.0, 6.0]
print(fourBand.multiplier.rawValue) // 100.0
print(fourBand.tolerance.rawValue) // 0.05
print(sixBand.coefficient.rawValue) // 100.0
色环电阻类型还包含一个用于计算容差范围的属性。 并且在 SixBandResistor
(六色环电阻)的情况下,包含一个用于计算给定温度变化下的电阻通量范围的函数。 两者都返回一个 Range<Double>
,这意味着你可以使用 Range
提供的所有功能。
let fourBand = FourBandResistor(digit1: .brown, digit2: .black, multiplier: .orange, tolerance: .gold)
let sixBand = SixBandResistor(digit1: .yellow, digit2: .violet, digit3: .black, multiplier: .brown, tolerance: .gold, coefficient: .brown)
let toleranceValueRange = fourBand.toleranceValueRange
print(toleranceValueRange.upperBound) // 10500.0
print(toleranceValueRange.lowerBound) // 9500.0
let coefficientValueRange = sixBand.coefficientValueRange(tempChange: 5)
print(coefficientValueRange.upperBound) // 4702.35
print(coefficientValueRange.lowerBound) // 4697.65
有时你可能想从一个值而不是彩色色环创建一个电阻。 在这种情况下,你可以使用电阻类型的各种其他初始化器。
由于并非所有值都可以用电阻的色环表示,因此在使用 init(value:)
初始化器时,你可以选择四舍五入该值,或者在遇到此类值时抛出错误。
let roundedUpFourBand = FourBandResistor(value: 456, tolerance: .silver)
let sixBand = SixBandResistor(value: 454, tolerance: .silver, coefficient: .yellow)
print(roundedUpFourBand) // 460 Ω
print(sixBand) // 454 Ω
do {
let tooManyDigits = try FiveBandResistor(value: 1234, tolerance: .silver)
} catch {
print(error) // invalidValueError
}
要在不同的电阻类型之间进行转换,可以使用 init(resistor:)
初始化器。 这些初始化器将另一个电阻作为其第一个参数,并使用它的值创建一个新的电阻,默认容差为 .gold
(金色),默认温度系数为 .brown
(棕色)。 这些默认值可以通过将它们与电阻一起传递来覆盖。
let fourBand = FourBandResistor(digit1: .brown, digit2: .black, multiplier: .red, tolerance: .gold)
let fiveBand = FiveBandResistor(resistor: fourBandResistor)
let sixBand = SixBandResistor(resistor: fiveBandResistor, coefficient: .yellow)
print(fourBand) // 1 KΩ
print(fiveBand) // 1 KΩ
print(sixBand) // 1 KΩ
Resistance
提供对 E系列标准优选值 的支持。 此功能以 ESeriesProtocol
的形式提供。 所有常用优选值的集合都已经有实现,并且使用它们非常简单。
let fiveBand = FiveBandResistor(digit1: .blue, digit2: .green, digit3: .black, multiplier: .brown, tolerance: .gold)
let value = fiveBandResistor.value
print(value) // 6500.0
let e6 = E6Series()
print(e6.preferredValues.sorted()) // [100, 150, 220, 330, 470, 680]
let valueInSeries = e6.containsPreferredValue(value)
print(valueInSeries) // false
let nextUp = e6.nextValueUp(from: value)
let nextDown = e6.nextValueDown(from: value)
print(nextUp) // 6800.0
print(nextDown) // 4700.0
如果你想更全面地了解 API,Resistance
在 Package 中包含一个 Swift Playground 文件,其中包含详细的说明和可运行的示例代码,以便于学习。
Resistance
使用 Swift Package Manager 分发。 要使用 Xcode 导入它,请按照此 指南。 或者将其作为依赖项添加到你的 Package.swift 清单中
let package = Package(
...
dependencies: [
.package(url: "https://github.com/8rightside/resistance.git", from: "1.0.0")
],
targets: [
.target( name: "YourTarget", dependencies: ["Resistance"]),
]
...
)
不要忘记在需要的地方导入它。
import Resistance
Resistance 根据 MIT 许可证发布。 有关详细信息,请参阅 LICENCE。