Swift3.2升级Swift4.0

如下是我在升级中的步骤,可以发现修改并不是很大,相信各位也能愉快的升级(整个过程耗时3个小时左右)

1. Xcode 9 的 File -> Project Settings -> 开启 New Build System(Preview)<不开启也没关系,官方说是更快了>

2. Build Settings -> Swift Language Version -> 修改为4.0 (工程 Tests UITests都需要主动修改<发现Xcode无法自动修改,提示转化错误>)

解决错误

  • 扩展里面的方法不能重写(父类方法如果要被重写就不能在写在扩展里,同时子类不能在扩展里重写)

  • 富文本问题:<字符串key,被NSAttributedStringKey枚举替换> 修改如NSForegroundColorAttributeName -> NSAttributedStringKey.foregroundColor 直接fix就可以解决

  • #selector 1. 函数调用 添加@objc。 2 .如果方法在闭包里面,需要明确对象(添加self)如 #selector(self.verify())

解决警告

  • Timer scheduleRepeating 函数失效 -> schedule(deadline ......

  • substring -> NSRange -> Range -> String:


let string ="Hello world"
let startIndex = string.startIndex
let range = startIndex...

let nsRange =NSRange(range, i: string)
if let strRange = Range(nsRange, in: string) {
    let sub = String(string[strRange]) /// 这里写法有点啰嗦,如有更好的写法(不要有警告,不强转NSString),请指教
}
  • KVO 旧的写法,已被新的闭包实现方式替换,代码如下:
let obj =Obj() /// 类
/// 下面是kvo obj对象的age属性,这里是swift4.0 keyPath语法,详细介绍请参考文档
/// age需要@obj修饰,确保是动态的。如果是框架的对象属性,可以直接kvo,比如UIScrollView 的contentOffset

let observation = obj.observe(\.age, options: [.new]) { (obj, change) in
    if let newValue = change.newValue {
    }
}
observation.invalidate() /// 取消kvo

你可能感兴趣的:(Swift3.2升级Swift4.0)