美文网首页
Swift3项目升级到Swift5

Swift3项目升级到Swift5

作者: Light413 | 来源:发表于2020-04-22 22:53 被阅读0次

    最新的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中对应的第三方库版本,然后重新安装。

    涉及到的指令操作:

    //不更新本地仓库、只更新项目
    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。

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

    相关文章

      网友评论

          本文标题:Swift3项目升级到Swift5

          本文链接:https://www.haomeiwen.com/subject/kfhwihtx.html