gpt4 book ai didi

swift - 如何在 Swift 中将 UIColor 用作枚举类型的 RawValue

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:29 26 4
gpt4 key购买 nike

我试图使用 UIColor 作为原始值声明一个枚举类型。这是代码:

enum SGColor: UIColor {
case red = #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)
case green = #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)
case purple = #colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1)
}

但是我在第一行有两个错误:

'SGColor' declares raw type 'UIColor', but does not conform to
RawRepresentable and conformance could not be synthesized

Do you want to add protocol stubs? Fix it

Raw type 'UIColor' is not expressible by any literal

如果我采纳了第一个建议,Xcode 将添加 typealias RawValue = <#type#>在括号内的开头。但我不确定如何处理它。如果我要解决第二个错误,我该如何将原始类型更改为文字?

最佳答案

经过一番挖掘,我找到了a post by Ole Begemann提到了如何制作一个自定义的颜色枚举集合,即本题中的SGColor,符合RawRepresentable协议(protocol)。

基本上,虽然 Xcode 很聪明地建议我通过显式告诉它原始类型来解决问题(如问题中的第一个错误所示),但它仍然不够聪明,无法弄清楚如何为颜色做到这一点文字,或 UIColor。

Ole Begemann 提到手动一致性将解决这个问题。并且他详细解释了如何操作。

虽然他使用了 UIColor 颜色对象(例如 UIColor.red),但我尝试并测试了使用颜色文字的可行性,因为一般来说,它们更直观直接且更可定制。

enum SGColor {
case red
case green
case purple
}
extension SGColor: RawRepresentable {
typealias RawValue = UIColor

init?(rawValue: RawValue) {
switch rawValue {
case #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1): self = .red
case #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1): self = .green
case #colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1): self = .purple
default: return nil
}
}

var rawValue: RawValue {
switch self {
case .red: return #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)
case .green: return #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)
case .purple: return #colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1)
}
}
}

关于swift - 如何在 Swift 中将 UIColor 用作枚举类型的 RawValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49192068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com