Swift 4.2或更高版本
请注意,这将仅将RGBA CGFloat值保存为属性列表中的数据.当使用NSKeyedUnarchiver(NSCoding)的标准方法时,这将使用32个字节(原始数据)而不是424个字节:
extension UserDefaults { func set(_ color: UIColor?, forKey defaultName: String) { var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0 guard let color = color, color.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else { removeObject(forKey: defaultName) return } let count = MemoryLayout.size set(Data(bytes: &red, count: count) + Data(bytes: &green, count: count) + Data(bytes: &blue, count: count) + Data(bytes: &alpha, count: count), forKey: defaultName) } func color(forKey defaultName: String) -> UIColor? { guard let data = data(forKey: defaultName) else { return nil } let size = MemoryLayout .size return UIColor(red: data[size*0..
extension UserDefaults { var backgroundColor: UIColor? { get { return color(forKey: "backgroundColor") } set { set(newValue, forKey: "backgroundColor") } } }
UserDefaults.standard.backgroundColor = .red UserDefaults.standard.backgroundColor // r 1.0 g 0.0 b 0.0 a 1.0