Mantle - 将字符串转换为枚举值
Mantle - Transform String to Enum Value
在我的 User
class 中,我定义了一个 type
属性 和一个 UserType
枚举。 type
属性 在 JSON:
中作为 String
值接收
{
"type" : "Admin"
}
我想在序列化和反序列化期间分别使用 Mantle
将 String
值转换为 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
枚举转换正常工作,我应该在我的实现中更改什么?在此先感谢您的帮助!
我会以另一种方式解决您的问题,即使用 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"
在我的 User
class 中,我定义了一个 type
属性 和一个 UserType
枚举。 type
属性 在 JSON:
String
值接收
{
"type" : "Admin"
}
我想在序列化和反序列化期间分别使用 Mantle
将 String
值转换为 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
枚举转换正常工作,我应该在我的实现中更改什么?在此先感谢您的帮助!
我会以另一种方式解决您的问题,即使用 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"