[英]Convert string to enum without a value swift
我正在创建一个权限系统,下面的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 }
}
您需要使枚举为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")
您可以将视觉结构修改为:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.