import SwiftUI
struct ContentView: View {
private let userDefaults = UserDefaults.standard
private let COLOR_KEY = "COLOR_KEY"
@State var selectedColor: Color = .purple
var body: some View {
NavigationView {
VStack(spacing: 20) {
RoundedRectangle(cornerRadius: 20)
.fill(selectedColor)
.frame(height: 240)
.overlay {
Text("Red")
.font(.system(.title))
.foregroundColor(.white)
}
Button {
saveColor(color: selectedColor)
} label: {
Text("Save Color")
.frame(maxWidth: .infinity)
.font(.system(.headline, design: .rounded))
}
.padding()
.frame(maxWidth: .infinity)
.foregroundColor(.white)
.background(selectedColor)
.cornerRadius(10)
Spacer()
}
.padding()
.navigationBarTitle("Save Color", displayMode: .inline)
.navigationBarItems(trailing: ColorPicker("", selection: $selectedColor))
.onAppear {
selectedColor = loadColor()
}
}
}
// Save Color
func saveColor(color: Color) {
let color = UIColor(color).cgColor
if let components = color.components {
userDefaults.set(components, forKey: COLOR_KEY)
print("Save Color: \(components)")
}
}
// Load Color
func loadColor() -> Color {
guard let array = userDefaults.object(forKey: COLOR_KEY) as? [CGFloat] else {
return Color.purple
}
print("Load Color: \(array)")
let color = Color(.sRGB, red: array[0], green: array[1], blue: array[2], opacity: array[3])
return color
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter