我在
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)