从枚举中选择随机值

时间:2017-02-17 13:54:51

标签: swift enums

我的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)

但它没有用。 紫色是枚举的最后一项,所以我选择了它。

4 个答案:

答案 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()