Swift4.2
if #available(iOS 9.0, *) {
if ProcessInfo.processInfo.isLowPowerModeEnabled {
<#Do low power stuff#>
} else {
<#Not in low power mode#>
}
}
if #available(iOS 9.0, *) {
if ProcessInfo.processInfo().lowPowerModeEnabled {
<#Do low power stuff#>
} else {
<#Not in low power mode#>
}
}
Swift2.2
if #available(iOS 9.0, *) {
if NSProcessInfo.processInfo().lowPowerModeEnabled {
<#Do low power stuff#>
} else {
<#Not in low power mode#>
}
}
是的,您可以添加观察者或直接查询。
NotificationCenter.default.addObserver(self, selector: #selector(powerStateChanged),
name: Notification.Name.NSProcessInfoPowerStateDidChange,
object: nil)
@objc func powerStateChanged(_ notification: Notification) {
let lowerPowerEnabled = ProcessInfo.processInfo.isLowPowerModeEnabled
// take appropriate action
}
U可以将下面的观察者与Uikit或Swiftui(无关紧要)
...
...
...
public class DevicePowerModeObserver: ObservableObject {
@Published private(set) var devicePowerModeState: UIDevice.PowerModeState
private var pipelines: Set<AnyCancellable> = []
public init() {
self.devicePowerModeState = UIDevice.PowerModeState(isLowPowerModeEnabled: ProcessInfo.processInfo.isLowPowerModeEnabled)
initPipelines()
}
private static let powerStateDidChangeNotificationName = Notification.Name.NSProcessInfoPowerStateDidChange
private func initPipelines() {
NotificationCenter.default.publisher(for: Self.powerStateDidChangeNotificationName)
.map { _ in
UIDevice.PowerModeState(isLowPowerModeEnabled: ProcessInfo.processInfo.isLowPowerModeEnabled)
}
.receive(on: DispatchQueue.main)
.assign(to: &$devicePowerModeState)
}
}
...
实际2025年,在iOS 18,xcode16.2中工作
struct PowerModeView: View {
@State private var powerStatePublisher = NotificationCenter.default.publisher(for: Notification.Name.NSProcessInfoPowerStateDidChange)
@State private var isLowPowerMode: Bool = false
private var modeString: String { isLowPowerMode ? "On" : "Off" }
var body: some View {
VStack {
Text("Low Power Mode: \(modeString)")
.foregroundStyle(.white)
.padding()
.background(isLowPowerMode ? .red : .green)
}
.onReceive(powerStatePublisher.receive(on: DispatchQueue.main)) { _ in
isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled
}
.onAppear {
DispatchQueue.main.async {
isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled
}
}
}
}