我正在创建一个权限系统,下面的emum显示了可能的高级权限。 我从服务器以字符串形式获取许可: advance.answer.view 有什么办法可以将该字符串转换为枚举Advance.Answer.View吗?

enum Advance {

        case View, Edit

        enum Answer { case View, Edit }
        enum Ride { case View, Edit }
        enum Contact { case View, Edit }
        enum Document { case View, Edit }
        enum Guest { case View, Edit }
        enum Section { case View, Edit, Create }
        enum Member { case View, Edit }
        enum Flight { case View, Edit }
        enum Location { case View, Edit }
        enum Time { case View, Edit }
        enum Event { case View, Edit }

    }

#1楼 票数:1

您需要使枚举为String原始值,例如

enum Answer:String {
  case View = "View"
  case Edit = "Edit"
  init(s:String) {
    if s == "xy" { self = .View}
    else { self = .Edit }
  }
  mutating func fromString(s:String) {
    if s == "xy" { self = .View}
  }
}

var answer1 = Answer(rawValue:"View")!
var answer2 = Answer(s:"x")
answer2.fromString("xy")

#2楼 票数:1

您可以将视觉结构修改为:

enum Advance {
    case Answer(view: Bool, edit: Bool)
}

// usage
Advance.Answer(view: false, edit: true)

UPD。 另一种情况:

enum Advance: String {
    case View = "view", Edit = "edit"

    static func getEnumType(value: String) -> EnumProtocol.Type {
        switch value {
            case "contact":
                return Contact.self

            default:
                return Answer.self
        }
    }

    enum Answer: String, EnumProtocol {
        init(rawValue: String) {
            switch rawValue {
                case "edit":
                    self = .Edit

                default:
                    self = .View
            }
        }

        case View = "view", Edit = "edit"
    }

    enum Contact: String, EnumProtocol {
        init(rawValue: String) {
            switch rawValue {
                case "write":
                    self = .Write

                case "edit":
                    self = .Edit

                default:
                    self = .View
            }
        }

        case View = "view", Edit = "edit", Write = "write"
    }
}

您可以使用rawValue的get函数扩展EnumProtocol。

protocol EnumProtocol {
    init(rawValue: String)
}

更新于(31/01/2016)

用法:

Advance.getEnumType("contact").init(rawValue: "write") // Advance.Contact.Write
Advance.getEnumType("unknown").init(rawValue: "abc") // Advance.Answer.View

  ask by jamespick translate from so

未解决问题?本站智能推荐:

17回复

Swift:将枚举值转换为字符串?

鉴于以下枚举: 如何从下面的audience常量中获取字符串"Public" ?
1回复

披风-将字符串转换为枚举值

在我的User类中,我定义了一个type属性和一个UserType枚举。 type属性在JSON中作为String值接收: 我想使用Mantle分别在序列化和反序列化期间将String值转换为UserType枚举对象,并转换回String 。 我搜索了其他SO帖子和Mantle文档,
1回复

如何将字符串值转换为枚举

如何将String值转换为String类型的枚举? 我的枚举定义如下: 我想将字符串“ recommendation”转换为类型。Recommendation
1回复

将Objective-C枚举转换为Swift字符串

我正在尝试将iOS错误代码转换为Swift 2(XCode 7.2)中的String。 但是转换为String会返回类型名称,而不是系统枚举的值名称 。 这是我正在尝试的: 但是使用Swift中声明的枚举,这可以按预期工作: 我试图避免使用所有可能的枚举值的Switch-
9回复

在 Swift 中,是否可以将字符串转换为枚举?

如果我有一个包含 a,b,c,d 案例的枚举,我是否可以将字符串“a”转换为枚举?
2回复

是否可以将枚举隐式转换为字符串? (迅速)

在Swift中是否可以将枚举隐式转换为字符串? 作为一个具体的示例,请考虑以下表示UITableViewCell标识符的枚举: 然后,我们可能要使用此标识符出队一个单元... 到处都是我们都需要使用.rawValue的事实,这尤其令人讨厌。 我可以使枚举遵循任何协议以
1回复

快速连接嵌套枚举字符串

我想声明一个枚举类型(例如ParentEnum),它将用作函数的参数,它包含多个“子”枚举,并且每个子枚举的情况都使用子枚举的名称作为前缀,这是一个例子: 有没有办法概括“ / ChildEnumX”部分,所以我只需要定义“ / cX”作为其rawValue,当我调用ParentEnum
2回复

已解决 - Swift 枚举 - 将嵌套枚举转换为字符串枚举以允许 .rawValue

解决了 感谢@New Dev 和@Joakim Danielson 的帮助。 我使用@Joakim Danielson 的回答来改进我的代码。 我有一个扩展方法可以根据给定的 String Enum 将 accessibilityIdentifiers 分配给视图。 我更新了方法以直接接受 Str