Swift3项目升级到Swift5
swift的副本.png最新的Xcode11.4 已经不能运行曾经Swift3.x的代码了。 我本想用Swift5重写一遍、后来感觉重写工作量有点大,业余精力有限所以直接在原基础上升级改造。
源项目 https://www.jianshu.com/p/3228bfa3be7d
曾经Swift3写的,业余更新造成年久失修。
准备
- Xcode 11.4
- Xcode 10.1
源项目能在支持Swift3.x
的Xcode 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中对应的第三方库版本,然后重新安装。
涉及到的指令操作:
//不更新本地仓库、只更新项目
pod update --verbose --no-repo-update
//更新指定的库
pod update 库名
pod install
这一步操作简单但比较费时,可能会出现莫名其妙的中断、报错。然后重复执行,最终成功安装。
问题记录
1、创建UIColor对象方法改变
3.x :
UIColor (colorLiteralRed: 244/255.0, green: 245/255.0, blue: 246/255.0, alpha: 1)
修改为:
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。