swift 2.3 -> swift 4.0

总结下,在升级过程中,遇到的问题,都是干货,不玩虚的。
这东西也不是一天两天就能完成的,慢慢来吧。(持续更新)
遇到啥,写啥,没有规律的。参考下就行了。

  1. 用xcode9,打开之前的项目,运用xcode自带的转换器,先转换一次,然后按照提示,一步步改对应文件

UIView.hidden -> UIView.isHidden

UIAlertView->UIAlertController
let alertController = UIAlertController(title: "提示", message: "我是内容", preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
let okAction = UIAlertAction(title: "确认", style: .default, handler:{
(UIAlertAction) -> Void in
print("点击了确认")
})
// 当添加的UIAlertAction超过两个的时候,会自动变成纵向分布
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(UInt64((CGFloat(duration) + 0.5)) * NSEC_PER_SEC)), dispatch_get_main_queue(), {
()->Void in
print("啦拉拉")
});
-->
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5) {
print("啦拉拉")
}
用起来超级简单啊!!!

CGRectMake --> CGRect(x: 0, y:0, width:0 height: 0)
CGRectGetMinX(frame) --> frame.minX
CGRectGetMinY(frame) --> frame.minY

  1. 关于 CocoaPods 第三方库升级,如果用到了 swift 语言的三方库,请打开 use_frameworks!

  2. 由于我们的项目是 OC + swift 混编,在升级的过程中遇到一个问题,我用pod导入 SnapKit 4.0.0,导入的时候,build,报错;
    直接拖拽文件夹,build,报错
    最终方法,下载完源码之后,拖拽 SnapKit.xcodeproj 项目到项目中,在导入
    SnapKit.framework,就能编译通过,并且能正常使用

70134A2B-163F-4661-A2AF-4D7DA897A5CB.png
swift 2.3 -> swift 4.0_第1张图片
6021CF53-9ED9-4158-AD0B-A0A33401FB97.png
  1. 由于我们的项目是 OC + swift 混编,在OC中调用swift方法,变量时,记着添加 @objc 关键字

  2. 通知的写法改变了

NotificationCenter.default.addObserver(self, selector: #selector(notificationAction(notification:)), name: NSNotification.Name(rawValue: kNotificationFeedbackMessage), object: nil)

通知方法前边要加上 @objc
@objc func notificationAction(notification:NSNotification){}

6.对应的UICollectionView/UITableView的方法都要重写,不过可以查找替换,另外要实现UICollectionViewDelegateFlowLayout,要不对应的layout方法不走。
备注:如果方法名不能自动提示的话,可以通过官方文档查找到

7.要想适配X,需要用到安全区(safe area),它最低支持 iOS 9,binggo,很多API被废弃了,继续解决吧,亲们。0.0

升级完之后,要干嘛,当然是要适配了,请看 iphoneX 适配那些事

你可能感兴趣的:(swift 2.3 -> swift 4.0)