Swift4.1的切换小结

412 阅读2分钟

今天心血来潮把项目的主工程从Swift3.3 切到了 Swift4.1 当中遇到的一些变化和碰到的问题,在这里分享一下,也希望其他人不要踩到相同的坑。

先介绍下环境吧,笔者用的是Xcode9.3(9E145),应该是最新的版本吧~

第三方库笔者使用的是cocoapods来管理,虽然carthage也很好,但有的库并不支持,所以公司项目用的还是cocoapods。

废话有点多了。入正题吧

1.这次主要是把主工程的代码切刀swift4,因为有的第三方库并不支持,所以在Podfile文件中要做一定的修改,如下:


把有swift4的第三方和没有的区分开来管理。

2. swift4 这次需要所有的 #selector() 的方法前 加上“@objc”

3. swift4 不在支持重载 initialize () 方法,所以现在还有的要劲量修改起来了

4. extension里也不在支持 重载方法 (笔者之前有很多的方法都是在extension,重载方法的,坑)

5.  使用富文本的话 “kCTForegroundColorAttributeName” 不能用了,会无效果的,可以替换成 "NSAttributedStringKey.foregroundColor"。PS:其他的都用效果 不需要NSAttributedStringKey点 这里有点搞不懂。当然为了安全可以都用 NSAttributedStringKey点 来解决

6.  JSON序列化时(笔者用的是ObjectMapper),如果有的值用Float接收现在要换成CGFloat,否则的话可能会就收不到,因为Float不支持64位,不像Int会自动转换,有人会问那用Float32 或者 Float64呢?笔者使用后也是么接收到值。

7. UICollectionview 的方法被修改了

如果是swift2.3时代写的 如图:


在swift3时代是可以继续使用的,因为兼容

但现在swift4 就会无效,注意是无效不会报错或者 警告你

新方法 如图:



8. func numberOfSectionsInTableView(_ tableView: UITableView) -> Int  方法 在 新版本中 也被修改为  func numberOfSections(in tableView: UITableView) -> Int

目前主工程已经切换到了swift4.1,在切换过程中发现了如上的坑,之后如果新发现会继续更新,也希望有其他新发现的朋友,也分享一下经验。