我的UIColor extension
enum
名为myColors
:
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")
}
我正在尝试将sprite
颜色随机设置为其中一种颜色(红色,绿色,蓝色,黄色,紫色)。
我在Stack Overflow上找到的答案很少,但没有一个有用。
我试着这样做:
let sprite = Player(x,y,color: myColors(rawValue: myColors.purple.rawValue+1)
但它没有用。 紫色是枚举的最后一项,所以我选择了它。
答案 0 :(得分:8)
我建议避免将对象UIColor
存储在enum
中,我的方法是:
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()
答案 1 :(得分:4)
继@ 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
}
}
答案 2 :(得分:1)
这里的窍门是使枚举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
}
}
答案 3 :(得分:0)
如果您的枚举实现
class Storage
{
var elements : [Visual]
init()
{
elements = [Visual]()
}
func add(item : Visual)
{
elements.append(item)
}
func delete(item : Visual)
{
}
func printItems()
{
print(elements)
}
}
,则可以使用CaseIterable
,如Richard所描述。
除此之外,您可以使用allCases()
来获得随机值:
randomElement()