如下是我在升級中的步驟,可以發現修改并不是很大,相信各位也能愉快的升級(整個過程耗時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