Swift – Battery level and charger status

Apple offer the batteryState in the UIDevice class:

UIDevice.current.batteryState

You cannot read the batteryState directly, you need first to enable the isBatteryMonitoringEnabled:

UIDevice.current.isBatteryMonitoringEnabled = true

As Apple said:

Enable battery monitoring if your app needs to be notified of changes to the battery state, or if you want to check the battery charge level.

The default value of this property is NO, which:

  • Disables the posting of battery-related notifications
  • Disables the ability to read battery charge level and battery state
Setting this to true enable you to get all of these statuses:
public enum BatteryState : Int {
    case unknown   // called if the monitor is not enabled
    case unplugged // without charger attached
    case charging  // with charger attached
    case full      // at 100%
}

Here a simple function to read all these values:

func batteryStatus() {
  UIDevice.current.isBatteryMonitoringEnabled = true

  switch UIDevice.current.batteryState {
    case .unknown:
      print("BATTERY: UNKNOWN!")
    case .charging:
      print("BATTERY: charging...")
    case .full:
      print("BATTERY: full")
    case .unplugged:
      print("BATTERY: unplugged...")
  }
}

If you want also to know the battery level, you can use batteryLevel.

The battery level is a range from 0.0 (fully discharged) to 1.0 (100% charged).  This property become -1.0 if the battery monitor is not enabled.

print("BATTERY level: \(UIDevice.current.batteryLevel)")

that’s all.