【问题标题】:Mantle - Transform String to Enum ValueMantle - 将字符串转换为枚举值
【发布时间】:2015-07-22 15:36:32
【问题描述】:

在我的User 类中,我定义了一个type 属性和一个UserType 枚举。 type 属性在 JSON 中作为 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'sJSONTransformerForKey 方法并为type 属性指定了我的自定义转换器以执行转换。当我尝试将 JSON 序列化为 User 对象时,我收到以下错误消息:

type is not a property of User

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

为了使String 到枚举的转换起作用,我应该在我的实现中进行哪些更改?提前感谢您的帮助!

【问题讨论】:

    标签: ios swift enums github-mantle nsvaluetransformer


    【解决方案1】:

    我会以另一种方式解决您的问题,使用快速枚举的原始值:

    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"
    

    【讨论】:

    • 感谢您的帮助!我希望将 String 转换为 Enum,但我不明白为什么我不能首先检查原始值。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2014-03-18
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多