Xcode项目中不同Swift版本导致的问题

来源:互联网 发布:润和软件 死人 编辑:程序博客网 时间:2024/06/06 00:28

你会问同一个Xcode项目中还会用不同版本的Swift?

对!举个栗子:2年前你写了一个管理密码的App,最近你觉得有必要再写一个Today Widget插件用来便捷显示密码。

之前的代码Swift版本是3.2(假设),而最新的Widget则使用4.0

为什么不把3.2的代码升级到4.0呢?这是可以的,但是涉及到要改很多地方:

升级带来许多问题


而且3.2和4.0也不是完全不兼容,只是在某些地方新旧版本会有冲突,没必要为了这一点兼容性而老项目全部升级版本。

比如说对于NSMutableAttributedString的操作,4.0之后对于属性名称的引用方式和之前有不同,无法写出3.2和4.0都能编译通过的代码。

对于3.2和4.0都会引用到的代码片段,我们必须因”版”而异,用Swift的编译宏命令做代码隔离:

#if swift(>=4.0)            attrString.addAttribute(.foregroundColor, value: UIColor.red, range: range)            attrString.addAttribute(.backgroundColor, value: UIColor.green, range: range)            attrString.addAttributes([.shadow:keywordShadow,.verticalGlyphForm:0], range: range)        #else            attrString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: range)            attrString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.green, range: range)        attrString.addAttributes([NSShadowAttributeName:keywordShadow,NSVerticalGlyphFormAttributeName:0], range: range)        #endif

以上代码在项目的公共组里的String+ext.swift文件中,该文件会同时被App和Widget项目包含使用。

使用如上所示的代码隔离,或称为选择编译使得全部项目顺利编译通过。

阅读全文
0 0