Swift3项目升级到Swift5

2020-04-24 17:55:50 浏览数 (1)

最新的Xcode11.4 已经不能运行曾经Swift3.x的代码了。 我本想用Swift5重写一遍、后来感觉重写工作量有点大,业余精力有限所以直接在原基础上升级改造。

swift的副本.png

源项目 https://www.jianshu.com/p/3228bfa3be7d

曾经Swift3写的,业余更新造成年久失修。

准备
  • Xcode 11.4
  • Xcode 10.1

源项目能在支持Swift3.xXcode 10.1中正常运行 , 所以升级步骤先在Xcode 10.1中升级到 Swift4.x , 然后在Xcode 11.4升到 Swift5.x

修改项目源码
  • Xcode 10.1中【edit】-【Convert】-【to Current Swift Syntax】

这里只转换自己的源码 , 忽略我们引入的Pod中的第三方库。转换完后有的地方可能需要手动修改,根据红叉提示修改即可。

每操作完成一步骤后,运行项目查看当前效果。肯定一堆红叉,不用怕、慢慢的它就消失了。完成后项目变为 Swift4.x

  • Xcode 11.4打开项目、重复上述操作

操作完成后项目变为 Swift5.x

修改Pod文件

首先更新本地pod仓库,修改Podfile中对应的第三方库版本,然后重新安装。

涉及到的指令操作:

代码语言:javascript复制
//不更新本地仓库、只更新项目
pod update --verbose --no-repo-update

//更新指定的库
pod update 库名 

pod install

这一步操作简单但比较费时,可能会出现莫名其妙的中断、报错。然后重复执行,最终成功安装。

问题记录

1、创建UIColor对象方法改变 3.x :

代码语言:javascript复制
UIColor (colorLiteralRed: 244/255.0, green: 245/255.0, blue: 246/255.0, alpha: 1)

修改为:

代码语言:javascript复制
UIColor.init(red: 244/255.0, green: 245/255.0, blue: 246/255.0, alpha: 1) 

2、The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "DCTT" target. (in target 'DCTT')

在Swift 4之前,编译器对Objective-C自动提供了一些Swift声明。 例如,编译器会为NSObject子类的所有方法创建Objective-C入口点。 该机制称为@objc推断(@obj Inference)。

在Swift 4中,这种自动@objc推断已被废弃,因为生成所有这些Objective-C入口点有代价。 当“Swift 3 @objc Inference”设置为“On”时,它允许旧代码运行。 但是,它会提示这些需要解决的弃用警告,建议“修复”这些警告,并将设置切换到“Default”。新的Swift项目的默认为“Default”。

修改:选择Target->Build Settings,搜索Swift3,在Swift3 @objc Inference中,把On改为Off或者Defalut。

编译、运行成功,修改完成。

0 人点赞