importSwiftUIstructContentView:View{var body:someView{BatteryView().frame(width:170, height:60).padding()}}structHalfCircleShape:Shape{funcpath(in rect:CGRect)->Path{var path =Path()
path.move(to:CGPoint(x: rect.minX, y: rect.midY))
path.addArc(center:CGPoint(x: rect.minX, y: rect.midY), radius: rect.height , startAngle:.degrees(90), endAngle:.degrees(270), clockwise:true)return path
}}structBatteryView:View{init(){UIDevice.current.isBatteryMonitoringEnabled =true}var body:someView{// UIDevice.current.batteryLevel always returns -1, and I don't know why. so here's a value for you to previewlet batteryLevel =0.4GeometryReader{ geo inHStack(spacing:5){GeometryReader{ rectangle inRoundedRectangle(cornerRadius:15).stroke(lineWidth:3)RoundedRectangle(cornerRadius:15).padding(5).frame(width: rectangle.size.width -(rectangle.size.width *(1- batteryLevel))).foregroundColor(Color.BatteryLevel)}HalfCircleShape().frame(width: geo.size.width /7, height: geo.size.height /7)}.padding(.leading)}}}extensionColor{staticvarBatteryLevel:Color{let batteryLevel =0.4print(batteryLevel)switch batteryLevel {// returns red color for range %0 to %20case0...0.2:returnColor.red
// returns yellow color for range %20 to %50case0.2...0.5:returnColor.yellow
// returns green color for range %50 to %100case0.5...1.0:returnColor.green
default:returnColor.clear
}}}structContentView_Previews:PreviewProvider{staticvar previews:someView{ContentView()}}