“Resistance”

iOS Mac Linux

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Ω

E系列功能

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

Swift Playground 文档

如果你想更全面地了解 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。