ios – Swift 4向后兼容性

前端之家收集整理的这篇文章主要介绍了ios – Swift 4向后兼容性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Xcode 8.3.3( Swift 3.1)的项目中有以下代码
let font = CGFont(provider!)
CTFontManagerRegisterGraphicsFont(font,&error)

但是在Xcode 9 Beta(Swift 4)中,我收到以下错误

Value of optional type ‘CGFont?’ not unwrapped; did you mean to use@H_404_8@ ‘!’ or ‘?’?

错误是因为采用CGDataProvider的initializer for CGFont现在返回一个可选项.

但是,当我应用修复:

let font = CGFont(provider)
CTFontManagerRegisterGraphicsFont(font!,&error)

代码不再使用Swift 3.1在Xcode 8.3.3中编译,因为字体不是可选的,因此不能很好地与!一起使用.

有没有办法在两个版本的Xcode中使这个工作? Swift 4是否应该向后兼容(使用Swift 3编译器编译)?

解决方法

这是Core Graphics的一个重大变化,而不是Swift本身. API已更改,初始化程序现在可以使用.

使用conditional compilation使用3.1和4.0编译器编译代码

#if swift(>=4.0)
let font = CGFont(provider!)
#else
let font = CGFont(provider)!
#endif

CTFontManagerRegisterGraphicsFont(font,&error)

猜你在找的iOS相关文章