swift 使用CoreData中的字符串设置颜色属性?

vxbzzdmp  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(113)

我在CoreData中存储了一个'color'项作为字符串。是否可以将其设置为文本或形状上的颜色属性?
例如,而不是这样:
第一个月
我能做这样的事吗?
.foregroundColor(Color string from CoreData here?)

qojgxg4l

qojgxg4l1#

有多种方法可以实现这一要求:

方案1:

将十六进制字符串存储到数据库中,并将该十六进制字符串转换为UIColorUIColor转换为Color,您可以使用它在文本或任何形状上显示。

解决方案2:

您必须编写一个枚举,将字符串Map到Color

参考号:

https://www.hackingwithswift.com/example-code/uicolor/how-to-convert-a-hex-color-to-a-uicolor

c3frrgcw

c3frrgcw2#

如果您想要使用的颜色数量有限,只需创建一个字典,将颜色的字符串名称Map到相应的Color。然后将字符串存储到CoreData中,并在您希望在UI中使用颜色时使用字典应用所需的Map。
下面是一个例子。CoraData中的Student实体有3个属性:name(字符串)、hColor(字符串)和id(UUID)。

import SwiftUI

let colorDict: [String: Color] =
["green" : .green,
 "red" : .red,
 "brown" : .brown,
 "blue" : .blue,
 "purple" : .purple
]

struct ContentView: View {
    @FetchRequest(sortDescriptors: []) var students: FetchedResults<Student>
    @Environment(\.managedObjectContext) var moc
    
    var body: some View {
        // The saved hColor string is used to specify the foreground color
        VStack {
            List(students) { student in
                    Text(student.name ?? "anonymous")
                        .foregroundColor(colorDict[student.hcolor ?? "blue"])
            }
            Button("Add") {
                //generate random student names and color strings
                let names = ["Granger", "Lovegood", "Potter", "Weasley"]
                let chosenName = names.randomElement()!
                let chosenColor = colorDict.keys.randomElement()
                    
                // create a student object (including its randomly chosen
                // color string attribute) to save to CoreData
                let student = Student(context: moc)
                student.id = UUID()
                student.name = chosenName
                student.hcolor = chosenColor
                
                //save the managed object context.
                do{try moc.save()}
                catch{}
            }
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

字符串

相关问题