coredata에는 color 객체를 저장하기 위한 type이 제공되지 않는다.
그래서 color 정보를 coredata에 저장하기 위해서는 color를 r,g,b,a 로 분해 후에 각가 저장하는 방법 이 있따.
coredata에 attributes를 만들때, Type을 Double로 설정한다.
그리고 color 객체에서 rgba 요소를 분해하기 위해서 아래의 코드를 추가한다.
import swiftUI
#if canImport(UIKit)
import UIKit
#elseif canImport(AppKit)
import AppKit
#endif
extension Color {
var components: (red: CGFloat, green: CGFloat, blue: CGFloat, opacity: CGFloat) {
#if canImport(UIKit)
typealias NativeColor = UIColor
#elseif canImport(AppKit)
typealias NativeColor = NSColor
#endif
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var o: CGFloat = 0
guard NativeColor(self).getRed(&r, green: &g, blue: &b, alpha: &o) else {
// You can handle the failure here as you want
return (0, 0, 0, 0)
}
return (r, g, b, o)
}
}
위의 코드의 사용법은 아래와 같다.
Color.red.components.red // 0.9999999403953552
coredata에 추가하기 위해서 사용한 예제는 아래와 같다.
func addTag(color: Color, name: String) {
let newItem = TagEntity(context: manager.context)
newItem.id = UUID()
newItem.name = name
newItem.timestamp = Date()
newItem.r = color.components.red
newItem.g = color.components.green
newItem.b = color.components.blue
newItem.a = color.components.opacity
save()
}