小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的数组,分别表示(按顺序)a
,b
,c
,d
,tx
和ty
Apple决定开始使其Frameworks数据对象与Codable
,我期待越来越多的Apple Framework在Codable
旅行车上Codable
! (请问下一个核心位置吗?)
(2017–08–01)当我的任务完成后,Bartosz Polaczyk指出,有一种实际的方式可以看到《
Codable
一致性源代码🎉
事实证明,如果我们看一下Swift源代码,这里就具有完整的CoreGraphics Codable
一致性!
上面写的所有内容仍然都是100%真实且完全有效,但是拥有实际代码真棒:谢谢Bartosz Polaczyk🙌
Federico 是一位驻曼谷的软件工程师,对Swift,极简主义,设计和iOS开发充满热情。