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

你会问同一个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项目包含使用。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值