-
Notifications
You must be signed in to change notification settings - Fork 662
对枚举类型的实现效果不佳 #43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
是的,由于HandyJSON使用的赋值方法比较特殊,目前确实有一些限制,影响比较大的就是枚举类型的赋值。目前枚举类型需要通过自定义解析这种方式来实现。迟点我把文档再完善下。 入侵性方面,目前确实存在问题。我继续研究看看有没有更好的处理方式。 |
我看了源码,发现在自定义解析 对于枚举这种常用的非基本类型,可否通过 |
|
是通过自定义解析去解析枚举值但是这个枚举属性不能是有默认值的属性如: struct ClassA: HandyJSON {
var field1: (String, String)?
var field2: (String, String)!
var field3 = ("", "")
mutating func mapping(mapper: HelpingMapper) {
mapper.specify(property: &field1) { str in
return ("a", "b")
}
mapper.specify(property: &field2) { str in
return ("a", "b")
}
mapper.specify(property: &field3) { str in
return ("a", "b")
}
}
} 具体转化一下这就了解了 |
我把我想法实现了,已经提交: #97288d,欢迎检查下。 然后参考 示例代码,一个枚举类型要支持反序列化,只需要实现 enum Gender: String, HandyJSONEnum {
case Male = "Male"
case Female = "Female"
static func makeInitWrapper() -> InitWrapperProtocol? {
return InitWrapper<String>(rawInit: Gender.init)
}
} 如果觉得有侵入性,可以这样: enum Gender: String {
case Male = "Male"
case Female = "Female"
}
extension HandyJSONEnum {
static func makeInitWrapper() -> InitWrapperProtocol? {
return InitWrapper<String>(rawInit: Gender.init)
}
} 实现 没什么问题的话,我今天就发 |
good job |
fixed in #97288d. |
Installing HandyJSON 5.0.4-beta 中没有看到呢? |
我们通常会针对服务端下发的数字转化成枚举
enum ResourceType : Int {
case 新闻 = 1
case 自媒体 = 2
case 帖子 = 3
case 问答 = 4
case 话题 = 5
case Unknown = -1
}
在ObjectMapper里只要直接放上去这个,在用默认map就可以反序列化
初始化默认使用Unknown, 当服务端下发6,7等客户端无法识别的类型时还是会保存Unknown不变
HandyJSON能否实现类似效果,另外HandyJSON这个协议加到enum上会有入侵性
The text was updated successfully, but these errors were encountered: