1.The use of Swift 3 @objc inference in Swift 4 mode is deprecated.
警告
選擇Target
->Build Settings
,搜索Swift3
,在Swift3 @objc Inference
中,把On
改為Off
或者Defalut
。
2.String
的subString
方法廢棄
在Swift3
中我們想要截取字符串的話,一般是用的是:
var ctime = "2017-09-28 12:11:32.43234"
ctime = ctime.substring(to: ctime.index(ctime.startIndex, offsetBy: 19))
不得不說這段語句剛開始寫的時候多么的蛋疼。。。不僅難以理解,而且在Xcode8
里面敲的時候,莫名的就會全部代碼高亮消失,然后提示Report Bug
。
終于在Swift4
中對其進行了修改,雖然個人感覺還是有點奇怪~,但是起碼好用多了!!
var ctime = "2017-09-28 12:11:32.43234"
let endIndex = ctime.index(ctime.startIndex, offsetBy: 19)
ctime = String(ctime[ctime.startIndex ..< endIndex])
但是注意
SubString
使用的是原來string
的內(nèi)存。官方建議是短時間使用,如果想要長時間保持,需要轉(zhuǎn)為String
。
為了使用起來更方便,我們可以寫一個Extension
來擴展Sting
:
extension String {
subscript (start: Int, end: Int) -> String? {
if start > count || start < 0 || start > end {
return nil
}
let begin = self.index(self.startIndex, offsetBy: start)
var terminal: Index
if end >= count {
terminal = self.index(self.startIndex, offsetBy: count)
} else {
terminal = self.index(self.startIndex, offsetBy: end)
}
let str = self[begin ..< terminal]
return String(str)
}
}
3.某些第三方庫未適配Swift4處理辦法
- 從
Profile
里移除該庫 -
pod update
或pod install
- 檢查
Target
->Build Settings
->Linking
->Other Linker Flags
中,是否移除了相應(yīng)的framework