Swift 中的响应式电池管理器
动机
我需要在使用 Rx 开发我的应用时需要一个电池管理器,于是我开始编写这个管理器。有了电池管理器,您可以通过响应式的方式流式传输电池数据。例如,通过订阅电池的临界状态,您可以通过改变应用程序的明暗模式来改善用户体验并减少电池使用。我想与社区分享我开发的这个库。我最大的动力是社区非常友好和乐于助人。希望它是有用的。
🛠 要求
- iOS 9.0+
- Xcode 11+
- Swift 5.1+
- RxSwift 5.1.1+
⚙️ 安装
Swift 包管理器(需要 Xcode 11)
将包添加到项目设置 -> Swift Packages
CocoaPods
将 RxBatteryManager 依赖项添加到 Podfile 中
# Podfile
use_frameworks!
# replace YOUR_TARGET_NAME with yours
target 'YOUR_TARGET_NAME' do
pod 'RxBatteryManager', '~> 1.0'
end
然后运行
$ pod install
👨💻 用法
import RxBatteryManager
单例 RxBatteryManager
let battery = Battery.monitor
在 AppDelegate 中初始化库
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Monitoring Battery
Battery.monitor.start()
return true
}
level - 返回 float
battery.level
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] level in
guard let self = self else { return }
print(level)
}).disposed(by: disposeBag)
state - 在 BatteryState 类型中返回 UIDevice.Enum
battery.state
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] state in
guard let self = self else { return }
switch state {
case .unknown:
print("unknown")
case .unplugged:
print("unplugged")
case .charging:
print("charging")
case .full:
print("full")
@unknown default:
fatalError()
}
}).disposed(by: disposeBag)
isLowPowerMode - 返回 bool
battery.isLowPowerMode
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] isLowPowerMode in
guard let self = self else { return }
print(isLowPowerMode)
}).disposed(by: disposeBag)
isLowLevel - 返回 bool
battery.isLowLevel
.observeOn(MainScheduler.instance)
.distinctUntilChanged()
.subscribe(onNext: { [weak self] isLowLevel in
guard let self = self else { return }
self.isLowBatteryLabel.text = "\(isLowLevel)"
}).disposed(by: disposeBag)
isCriticalLevel - 返回 bool
battery.isCriticalLevel
.observeOn(MainScheduler.instance)
.distinctUntilChanged()
.subscribe(onNext: { [weak self] isCriticalLevel in
guard let self = self else { return }
self.isCriticalBatteryLabel.text = "\(isCriticalLevel)"
}).disposed(by: disposeBag)
注意:建议你订阅主线程
👮♂️ 许可协议
RxBatteryManager 以 MIT 许可协议 发布。更多信息请参阅 LICENSE 文件。版权(c)RxSwiftCommunity