Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从枚举中选择随机值_Swift_Enums - Fatal编程技术网

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

谢谢,我选择了第一个答案,但是谢谢你的努力:)我删除了我的答案,因为我忽略了随机部分。“枚举可能不包含存储属性”更新了我的答案