Swift HandyJSON库中的类型相互转换的实现

ReyZhang
移动开发领域新星创作者
2023-02-21 14:58:51

前言

阅读优秀的开源框架,对提升自己的能力有很大帮助。HandyJSON库就是其中的优秀框架之一, 本文介绍一下HandyJSON库是如何处理类型间相互转换的。

我们在开发时,常见的类型转换如下:

  • Data <- -> String
  • Date <- -> 时间戳
  • Date <- -> String
  • URL <- -> String
  • UIColor <- -> 十六进制的hex颜色
    .....
    等等吧

类型转换HandyJSON库的设计

类型的转换 其实是类型加工的过程。 输入一个类型,通过加工处理后输出另外一种类型。 基于这种通用的处理,可以进行高层抽象。在Swift中抽象类型的定义使用关联类型( associatedtype )来实现,再结合协议来抽象。代码看起来如下:

public protocol TransformType {
     associatedtype Object
     associatedtype JSON
     func transformFromJSON(_ value: Any?) -> Object?
     func transformToJSON(_ value: Object?) -> JSON?
}

下面摘录一下HandyJSON库中各类型转换的代码实现:

Data 与 String 之间的类型转换

open class DataTransform: TransformType {
     public typealias Object = Data
     public typealias JSON = String

     public init() {}

     open func transformFromJSON(_ value: Any?) -> Data? {
         guard let string = value as? String else{
             return nil
         }
         return string.data(.utf8)
     }

     open func transformToJSON(_ value: Data?) -> String? {
         guard let data = value else{
             return nil
         }
         return String.init(data:data encoding:.utf8)
     }
}

更多类型间的转换参考:https://zhanglei.blog.csdn.net/article/details/124069180

 

 

 

...全文
成就一亿技术人!
拼手气红包 5.00元
719 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwareTeacher 2023-02-24
  • 打赏
  • 举报
回复

我们支持博客发评论红包了: https://blog.csdn.net/blogdevteam/article/details/128932621 可以试一试。

421

社区成员

发帖
与我相关
我的任务
社区描述
专注移动ios平台的软件开发,多年的一线研发经验,实战经验丰富,只为你呈现有价值的信息。
iosflutterandroid 技术论坛(原bbs) 山东省·青岛市
社区管理员
  • ReyZhang
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧