如下是我在升級(jí)中的步驟溯街,可以發(fā)現(xiàn)修改并不是很大海铆,相信各位也能愉快的升級(jí)(整個(gè)過程耗時(shí)3個(gè)小時(shí)左右)
1. Xcode 9 的 File -> Project Settings -> 開啟 New Build System(Preview)<不開啟也沒關(guān)系远寸,官方說是更快了>
2. Build Settings -> Swift Language Version -> 修改為4.0 (工程 Tests UITests都需要主動(dòng)修改<發(fā)現(xiàn)Xcode無法自動(dòng)修改襟铭,提示轉(zhuǎn)化錯(cuò)誤>)
解決錯(cuò)誤
擴(kuò)展里面的方法不能重寫(父類方法如果要被重寫就不能在寫在擴(kuò)展里贱鄙,同時(shí)子類不能在擴(kuò)展里重寫)
富文本問題:<字符串key,被NSAttributedStringKey枚舉替換> 修改如NSForegroundColorAttributeName -> NSAttributedStringKey.foregroundColor 直接fix就可以解決
#selector 1. 函數(shù)調(diào)用 添加@objc潮罪。 2 .如果方法在閉包里面康谆,需要明確對(duì)象(添加self)如 #selector(self.verify())
解決警告
Timer scheduleRepeating 函數(shù)失效 -> 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]) /// 這里寫法有點(diǎn)啰嗦,如有更好的寫法(不要有警告嫉到,不強(qiáng)轉(zhuǎn)NSString)沃暗,請(qǐng)指教
}
- KVO 舊的寫法,已被新的閉包實(shí)現(xiàn)方式替換,代碼如下:
let obj =Obj() /// 類
/// 下面是kvo obj對(duì)象的age屬性何恶,這里是swift4.0 keyPath語法孽锥,詳細(xì)介紹請(qǐng)參考文檔
/// age需要@obj修飾,確保是動(dòng)態(tài)的细层。如果是框架的對(duì)象屬性惜辑,可以直接kvo,比如UIScrollView 的contentOffset
let observation = obj.observe(\.age, options: [.new]) { (obj, change) in
if let newValue = change.newValue {
}
}
observation.invalidate() /// 取消kvo