Swift 从枚举中选择随机值
我有一个名为Swift 从枚举中选择随机值,swift,enums,Swift,Enums,我有一个名为myColors的UIColor扩展名enum: enum myColors { static let backgroundColor = UIColor(hex: "#373737") static let strokeColor = UIColor(hex: "#FFFCF9") static let red = UIColor(hex: "#FF6978") static let green = UIColor(hex: "#BCE784")
myColors
的UIColor扩展名enum
:
enum myColors {
static let backgroundColor = UIColor(hex: "#373737")
static let strokeColor = UIColor(hex: "#FFFCF9")
static let red = UIColor(hex: "#FF6978")
static let green = UIColor(hex: "#BCE784")
static let blue = UIColor(hex: "#B1DDF1")
static let yellow = UIColor(hex: "#FFFD98")
static let purple = UIColor(hex: "#A09ABC")
}
我正在尝试将一个精灵颜色随机设置为这些颜色之一(红色、绿色、蓝色、黄色、紫色)。
我在这里找到了一些关于堆栈溢出的答案,但没有一个有效。
我试着这样做:
let sprite = Player(x,y,color: myColors(rawValue: myColors.purple.rawValue+1)
但它不起作用。
紫色是枚举中的最后一项,所以我选择了它。我建议避免将对象UIColor
存储在枚举中,我的方法是:
enum myColors: String {
case backgroundColor = "#373737"
case strokeColor = "#FFFCF9"
case red = "#FF6978"
case green = "#BCE784"
case blue = "#B1DDF1"
case yellow = "#FFFD98"
case purple = "#A09ABC"
static func randomColor() -> UIColor {
let colorsToGetRandomly = [myColors.red, myColors.green, myColors.blue, myColors.yellow, myColors.purple]
let index = Int(arc4random_uniform(UInt32(colorsToGetRandomly.count)))
let color = colorsToGetRandomly[index].rawValue
return UIColor(hex: color)
}
}
myColors.randomColor()
根据@vadian的回答,返回随机颜色
enum MyColors : String {
case background = "#373737"
case stroke = "#FFFCF9"
case red = "#FF6978"
case green = "#BCE784"
case blue = "#B1DDF1"
case yellow = "#FFFD98"
case purple = "#A09ABC"
private var uiColor : UIColor {
return UIColor(hex: self)
}
private var all: [UIColor] {
return [MyColors.background, .stroke, .red,… etc ]
}
var randomColor: UIColor {
let index = Int(arc4random_uniform(UInt32(all.count)))
return all[index].uiColor
}
}
这里的诀窍是使枚举CaseIterable,以便.allCases数组可用
enum MyColors : String, CaseIterable {
case background = "#373737"
case stroke = "#FFFCF9"
case red = "#FF6978"
case green = "#BCE784"
case blue = "#B1DDF1"
case yellow = "#FFFD98"
case purple = "#A09ABC"
private var uiColor : UIColor {
return UIColor(hex: self)
}
static func randomColor() -> UIColor {
return MyColors.allCases[Int(arc4random_uniform(UInt32(MyColors.allCases.count)))].uiColor
}
}
如果枚举实现了caseitrable
,则可以使用前面介绍的allCases()
。
除此之外,您还可以使用randomElement()
获得随机值:
MyColors.allcases.randomElement()
谢谢,我选择了第一个答案,但是谢谢你的努力:)我删除了我的答案,因为我忽略了随机部分。“枚举可能不包含存储属性”更新了我的答案