import SwiftUI struct SettingsView: View { @EnvironmentObject var database: Database @Binding var isPresented: Bool var body: some View { VStack(alignment: .leading, spacing: 3) { HStack { Text("Settings") .font(.title2) .bold() Spacer() Button(action: hide) { Image(systemSymbol: .xmarkCircleFill) .foregroundColor(.gray) .font(.system(size: 26)) } } Text("Statistics") .font(.footnote) .textCase(.uppercase) .foregroundColor(.secondary) .padding(.top) Group { SettingsStatisticRow(label: "Caps", value: "\(database.numberOfCaps)") SettingsStatisticRow(label: "Total images", value: "\(database.numberOfImages)") SettingsStatisticRow(label: "Images per cap", value: String(format: "%.1f", database.averageImageCount)) }.padding(.horizontal) Text("Classifier") .font(.footnote) .textCase(.uppercase) .foregroundColor(.secondary) .padding(.top) Group { SettingsStatisticRow(label: "Version", value: "\(database.classifierVersion)") SettingsStatisticRow(label: "Recognized caps", value: "\(database.classifierClassCount)") }.padding(.horizontal) Text("Storage") .font(.footnote) .textCase(.uppercase) .foregroundColor(.secondary) .padding(.top) Group { SettingsStatisticRow(label: "Image cache", value: byteString(database.imageCacheSize)) SettingsStatisticRow(label: "Database", value: byteString(database.databaseSize)) SettingsStatisticRow(label: "Classifier", value: byteString(database.classifierSize)) }.padding(.horizontal) Spacer() } .padding(.horizontal) } private func hide() { isPresented = false } private func byteString(_ count: Int) -> String { ByteCountFormatter.string(fromByteCount: Int64(count), countStyle: .file) } } struct SettingsView_Previews: PreviewProvider { static var previews: some View { SettingsView(isPresented: .constant(true)) .environmentObject(Database.mock) .previewLayout(.fixed(width: 375, height: 330)) } }