在Swift中获取带有字符串的枚举

Coe*_*ter 0 enums swift

我希望在用户在选择器视图中选择"操作"后从枚举中获取值.所以我有字符串:selectedGenre = "action".

如何从案件中获得"28"?

public enum MovieGenres: String {
  case action = "28"
  case adventure = "12"
  case animation = "16"
  ...
}
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:MoveGenres.("selectedgenre").rawValue

Luc*_*tti 9

首先,这是你如何定义你的 enum

enum MovieGenre: String {
    case action
    case adventure
    case animation

    var code: Int {
        switch self {
        case .action: return 28
        case .adventure: return 12
        case .animation: return 16
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在给一个字符串

 let stringFromPicker = "action"
Run Code Online (Sandbox Code Playgroud)

您可以尝试构建枚举值

if let movieGenre = MovieGenre(rawValue: stringFromPicker) {
    print(movieGenre.code) // 28
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我重命名MovieGenres为MovieGenre,实际上枚举名称应该是单数.

  • `var code:String {switch self {case .action:return"28"case.冒险:返回"12"case .animation:return"16"//其余的}}` (3认同)

Ras*_*n L 6

您可以使用rawValue来获取Strings:

MovieGenres.Action.rawValue // 28
Run Code Online (Sandbox Code Playgroud)

并从字符串中获取它:

let twentyEight = MovieGenres(rawValue: "28")
Run Code Online (Sandbox Code Playgroud)

另一个提示,Swift 约定使用小写字母命名您的案例,如下所示:

 MovieGenres.action.rawValue // 28
Run Code Online (Sandbox Code Playgroud)

更新:

enum MovieGenre: String {
    case action
    case adventure
    case animation

    var value: Int {
        switch self {
            case .action: return 28
            case .adventure: return 12
            case .animation: return 16
        }
    }
}

let action = MovieGenre(rawValue: "action")?.value // 28
let adventure = MovieGenre(rawValue: "adventure")?.value // 12
let animation = MovieGenre(rawValue: "animation")?.value // 16
let none = MovieGenre(rawValue: "none")?.value // nil

if let value = MovieGenre(rawValue: pickerValue)?.value {
    print(value)
}
Run Code Online (Sandbox Code Playgroud)