小Xcode Beta带来的惊喜🎁:核心图形可编码一致性

⭐️⭐️⭐️️⭐️⭐
嗨! 此帖已移至新博客! 来到Fivestars.blog以获得最新文章!
⭐️⭐️⭐️️⭐️⭐

如果您早在Xcode 9 Beta 1之前就直接Codable Swift 4的Codable协议,同时启动了一个最新的Beta(3或更高版本),您可能会看到类似以下的警告:

核心图形框架不像Swift一样不是开源的,因此这不是我们可以预见的。 不过,这是个好消息!

事实证明,每一个CoreGraphics Geometric Data Type现在都符合Codable ,即:

  • CGFloat
  • CGPoint
  • CGSize
  • CGRect
  • CGVector
  • CGAffineTransform

太棒了! 我们如何利用这一优势?

如果我们将CGPoints / CGSizes / etc存储在某个地方,则现在必须确保以与新的Codable一致性期望的相同方式进行存储。
让我们看看如何!

尝试1:源代码

最简单的方法是查看源代码,例如,如果转到CGPoint定义,则将看到以下内容:

同样,Core Graphics Framework不是开源的,因此我们只能看到公共函数的标头和定义。 这不会帮助我们了解事物在幕后的工作方式,让我们尝试另一种方式…

尝试2:Apple的文档

我的第二个最佳猜测是Apple的文档,这令人失望:

尝试3:艰难的道路(游乐场!)

厌倦了猜测揭开谜团的新方法,我决定以简单的方式做事。 我开了一个新操场,开始编码:

所以你有它! 🎉🎉🎉

快速回顾一下,这是存储/读取数据的方式(如上面的Playground所示):

  • CGFloat
    只需要一个数字,带可选的小数点. 从小数部分中拆分整数部分(如果有小数部分)
  • CGPoint
    期望包含两个CGFloat的数组,第一个表示x ,第二个表示y
  • CGSize
    期望包含两个CGFloat的数组,第一个表示width ,第二个表示height
  • CGVector
    期望包含两个CGFloats的数组,第一个表示dx ,第二个表示dy
  • CGRect
    期望两个CGFloat的两个数组组成的数组,第一个表示origin (CGPoint) ,第二个数组的size (CGSize)
  • CGAffineTransform
    期望包含六个CGFloat的数组,分别表示(按顺序) abcdtxty

Apple决定开始使其Frameworks数据对象与Codable ,我期待越来越多的Apple Framework在Codable旅行车上Codable ! (请问下一个核心位置吗?)

(2017–08–01)当我的任务完成后,Bartosz Polaczyk指出,有一种实际的方式可以看到《 Codable 一致性源代码🎉

事实证明,如果我们看一下Swift源代码,这里就具有完整的CoreGraphics Codable一致性!

上面写的所有内容仍然都是100%真实且完全有效,但是拥有实际代码真棒:谢谢Bartosz Polaczyk🙌


Federico 是一位驻曼谷的软件工程师,对Swift,极简主义,设计和iOS开发充满热情。