Swift3.2升級Swift4.0

如下是我在升級中的步驟,可以發(fā)現(xiàn)修改并不是很大,相信各位也能愉快的升級(整個過程耗時3個小時左右)

1. Xcode 9 的 File -> Project Settings -> 開啟 New Build System(Preview)<不開啟也沒關系,官方說是更快了>

2. Build Settings -> Swift Language Version -> 修改為4.0 (工程 Tests UITests都需要主動修改<發(fā)現(xiàn)Xcode無法自動修改,提示轉(zhuǎn)化錯誤>)

解決錯誤

  • 擴展里面的方法不能重寫(父類方法如果要被重寫就不能在寫在擴展里,同時子類不能在擴展里重寫)

  • 富文本問題:<字符串key,被NSAttributedStringKey枚舉替換> 修改如NSForegroundColorAttributeName -> NSAttributedStringKey.foregroundColor 直接fix就可以解決

  • #selector 1. 函數(shù)調(diào)用 添加@objc。 2 .如果方法在閉包里面,需要明確對象(添加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]) /// 這里寫法有點啰嗦,如有更好的寫法(不要有警告,不強轉(zhuǎn)NSString),請指教
}
  • KVO 舊的寫法,已被新的閉包實現(xiàn)方式替換,代碼如下:
let obj =Obj() /// 類
/// 下面是kvo obj對象的age屬性,這里是swift4.0 keyPath語法,詳細介紹請參考文檔
/// age需要@obj修飾,確保是動態(tài)的。如果是框架的對象屬性,可以直接kvo,比如UIScrollView 的contentOffset

let observation = obj.observe(\.age, options: [.new]) { (obj, change) in
    if let newValue = change.newValue {
    }
}
observation.invalidate() /// 取消kvo
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容