地幔 - 将字符串转换为枚举值

时间:2015-07-22 15:36:33

标签: ios swift enums github-mantle nsvaluetransformer

在我的User课程中,我定义了type属性和UserType枚举。 {J}中的type属性作为String值接收:

{
    "type" : "Admin"
}

我想使用MantleString值转换为UserType枚举对象,并在序列化和反序列化期间分别转换回String。我搜索过其他SO帖子和Mantle文档,但无法正常工作。这是我的尝试:

enum UserType:String
{
    case Normal
    case Admin
}

class User: MTLModel, MTLJSONSerializing
{
    var type:UserType?

    static func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["type" : "type"]
    }

    static func JSONTransformerForKey(key: String!) -> NSValueTransformer!
    {
        if (key == "type")
        {
            return NSValueTransformer(forName: "UserTypeValueTransformer")
        }

        return nil
    }
}

// Custom Transformer
class UserTypeValueTransformer : NSValueTransformer
{
    override func transformedValue(value: AnyObject?) -> UserType
    {
        let theValue:String? = (value as? String)

        return ((theValue! == "Admin") ? UserType.Admin : UserType.Normal)
    }

    override func reverseTransformedValue(value: AnyObject?) -> AnyObject?
    {
        let theValue:UserType = (value as! UserType)

        return ((theValue == UserType.Admin) ? "Admin" : "Normal")
    }
}

在上面的代码中,我制作了一个自定义转换器,用于将String转换为UserType枚举值并返回。我已覆盖Mantle's JSONTransformerForKey方法,并为type属性指定了自定义转换器,以便执行转换。当我尝试将JSON序列化为User对象时,收到此错误消息:

type is not a property of User

type显然属于User模型的属性,但正在发生的事情使Mantle无法识别它。

我应该如何更改我的实现以使String枚举转换工作?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我会用另一种方式绕过你的问题,使用swift枚举的原始值:

enum UserType: String {
    case Normal = "Normal"
    case Admin = "Admin"
}

let string = "Admin"
let value = UserType(rawValue:string) //returns .Admin

let value = UserType.Normal
let string = value.rawValue() //returns "Normal"