在Swift中可以从String获取枚举类型吗?

时间:2019-02-27 06:26:59

标签: swift

是否可以从Enum获取String类型?

ex: let type1 = WSCLogin.self <-- OK
ex: let type2 = someFunction(typeString: "WSCLogin") -> WSCLogin.Type <-- issue

我可以将“ WSCLogin”另存为字符串 和字母,我想使用此字符串(“ WSCLogin”)实现WSCLogin.Type。
有可能吗?
谁能弄清楚someFunction(typeString: "WSCLogin") -> WSCLogin.Type的功能?
谢谢

enum WSCLogin: String {
    case mail
    case password
}

2 个答案:

答案 0 :(得分:1)

您可以使用以下枚举构造函数:

let x: WSCLogin? = WSCLogin(rawValue: String)

如果字符串是有效的原始值,这将为可选变量提供一个值;如果rawValue无效,则将提供nil

答案 1 :(得分:0)

// the type without a String
let type1 = WSCLogin.self

// the type with a String, without extension
let mail = WSCLogin(rawValue: "mail")
let type2 = type(of: mail)

// the type with a String, with extension
extension WSCLogin {
    var kind: WSCLogin.Type {
        return type(of: self)
    }
}
let type3 = WSCLogin(rawValue: "mail")?.kind

因为我们正在通过WSCLogin初始化程序初始化RawRepresentable,所以我们总是会返回一个Optional类型。您只需要先打开包装即可。


请注意,您不能使用typeType作为属性名称,因为两种方式都可能导致名称冲突。像这样的反引号

var `type`: WSCLogin.Type

您可以强制命名,但在这种情况下,您将覆盖此计算属性中使用的type()函数。