【问题标题】:How to get random value from struct如何从结构中获取随机值
【发布时间】:2019-07-30 14:24:11
【问题描述】:

如何从结构中选择一个随机常数值?

struct randomMessage {
    static let message1 = "Message1"
    static let message2 = "Message2"
    static let message3 = "Message3"
    static let message4 = "Message4"
    static let message5 = "Message5"
}

是将所有值添加到数组并选择 randomElement 的唯一方法吗?

【问题讨论】:

  • 到目前为止您尝试了哪些,哪些不完全有效?
  • @mag_zbc。我尝试将所有值添加到数组中并选择它 randomElement.
  • @KkMIW 这是一个好方法。随机整数的开关也是如此。在你的问题中表明这有什么问题
  • 但我不想创建不必要的变量数组!它的结构可以帮我从中挑选出随机元素吗?

标签: swift random struct


【解决方案1】:

如果你想把它打包成某种类型,你最好改用enum

enum RandomMessage: String, CaseIterable {
    case message1 = "Message1"
    case message2 = "Message2"
    case message3 = "Message3"
    case message4 = "Message4"
    case message5 = "Message5"

    static var get: String {
        return allCases.randomElement()!.rawValue
    }
}

这样您将保证它只有带有消息的“字段”,如果您收到新消息,您只需添加新案例,它将自动位于 allCases 数组中。

要获取随机消息,请执行以下操作:

let message = RandomMessage.get // one of the messages

【讨论】:

  • 这是有道理的!只有枚举才有可能!不是结构类?
  • @KkMIW 不,您不会自动访问所有结构/类属性。即使对于枚举,您也只能在枚举符合CaseIterable 时免费获得它。您可以尝试使用反射(Mirror 类型)来为结构/类实现相同的效果,但工作量更大
  • CaseIterable!谢谢大卫。你值得投票
【解决方案2】:

您可以将它们组织在一个数组中,然后从中选择一个随机值,如下所示

let names = ["Zoey", "Chloe", "Amani", "Amaia"]
let randomName = names.randomElement()!
print(randomName)

【讨论】:

  • 我假设您需要的是从一系列预定义的消息中获取随机消息
  • 这是我之前做的!我正在寻找是否有其他方法可以做到这一点?
  • 你想用它做什么?,所以你可以找到替代品
  • 让 randomeListMesage = [randomMessage.message1,randomMessage.message2,randomMessage.message3,randomMessage.message4,randomMessage.message5,randomMessage.message6,randomMessage.message7] randomeListMessage.randomElement()!
  • 感谢丹尼尔·费尔南多!这是有道理的!
猜你喜欢
  • 2021-08-08
  • 2015-10-12
  • 1970-01-01
  • 2010-12-11
  • 2019-05-14
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
相关资源
最近更新 更多