swift4更新中所遇到的一些問(wèn)題總結(jié)
前言
最近Swift 4發(fā)布了,完整的更新日志請(qǐng)點(diǎn)擊這里 >>: ,我大概看了下官方的更新日志,因?yàn)閤code9同時(shí)支持Swift4和Swift3.2,所以在升級(jí)Swift4的時(shí)候心沒(méi)有那么的痛,在轉(zhuǎn)換成Swift4時(shí)錯(cuò)誤集中在添加@objc上,如果項(xiàng)目是OC和Swift共存的項(xiàng)目,那么添加@objc會(huì)讓你加到懷疑人生。
下面主要給大家介紹了在更新過(guò)程中遇到的一些問(wèn)題,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
@objc
1、在Swift4中,OC和Swift共存的項(xiàng)目不再無(wú)腦將Swift的Public屬性和方法提供給OC,除非Swift中的方法和屬性用@objc標(biāo)記,這樣就減少了一些代碼的生成從而減少了包的大小。build之后我們是純swift項(xiàng)目所以大部分是在選擇器調(diào)用的方法前面也要添加@objc。
2、我們的項(xiàng)目是Swift的項(xiàng)目所以build保存很快就修改完成,Run起來(lái)后如期的Crash了。這個(gè)是因?yàn)槲覀兊腏SON轉(zhuǎn)Model是使用的OC版的Mantle和SwiftJSON進(jìn)行的解析,那么就要在所有的Model屬性前面添加@objc,不然Mantle在獲取類屬性類型的時(shí)候是空的??吹竭@個(gè)時(shí)候內(nèi)心是崩潰和拒絕升級(jí)Swift4的,所以我們選擇舍棄Mantle使用Codable。
Codable( 官方文檔)
1、在OC中JSON轉(zhuǎn)Model只能轉(zhuǎn)化為對(duì)象類型,在Codable支持JSON轉(zhuǎn)為常規(guī)類型。而遇到的更多的是將數(shù)據(jù)模型中的NSNumber改為Int或者Double,這是因?yàn)镹SNumber是OC的類型不遵守Codable的。
2、有時(shí)候我們會(huì)在Model中添加一些JSON串沒(méi)有的字段進(jìn)行邏輯處理,類似
struct A: Codable{
var a: Int?
var isSelect: Bool = false
}
因?yàn)?isSelect"是為了邏輯處理在JSON串中并不能找到相應(yīng)的字段,這個(gè)時(shí)候就會(huì)報(bào)出數(shù)據(jù)丟失的錯(cuò)誤,而我們只需要將“isSelect”改成可選就可以了。
stuct A: Codable {
var a: Int?
var isSelect: Bool?
}
在這次升級(jí)中主要是在改這OC調(diào)用Swift添加@objc的問(wèn)題和將數(shù)據(jù)解析改成Codable。還有一些錯(cuò)誤是因?yàn)槭褂肕antle轉(zhuǎn)JSON串出現(xiàn)的問(wèn)題只要使用JSONEncode,還有會(huì)多出字符串長(zhǎng)度判斷使用characters的警告刪除它就OK了。
平常使用泛型一個(gè)很煩的操作
我定義一個(gè)帶有泛型的方法
private func getData<T>(a: T) {
}
直接調(diào)用
self.getData<A>(a)
因?yàn)椴恢婪盒偷念愋投霈F(xiàn)
Cannot explicitly specialize a generic function
的錯(cuò)誤, 如果不指定類型
self.getData(a)
會(huì)出現(xiàn)下面的額錯(cuò)誤
Generic parameter 'Element' could not be inferred
只能在使用時(shí)進(jìn)行一次強(qiáng)轉(zhuǎn)
self.getData(a as A)
就是讓Xcode推斷出他的類型而不是你告訴他這個(gè)泛型是什么類型,這就很煩。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
舉例講解Swift編程中switch...case語(yǔ)句的用法
這篇文章主要介紹了Swift編程中switch...case語(yǔ)句的用法,其中fallthrough關(guān)鍵字在switch語(yǔ)句中的使用是重點(diǎn),需要的朋友可以參考下2016-04-04
Swift仿選擇電影票的效果并實(shí)現(xiàn)無(wú)限/自動(dòng)輪播的方法
這篇文章主要給大家介紹了關(guān)于Swift仿選擇電影票的效果并實(shí)現(xiàn)無(wú)限/自動(dòng)輪播的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解
這篇文章主要介紹了Swift使用WKWebView在iOS應(yīng)用中調(diào)用Web的方法詳解,使用WKWebView便等于使用和Safari中相同的JavaScript解釋器,用來(lái)替代過(guò)去的UIWebView,需要的朋友可以參考下2016-04-04
Swift利用純代碼實(shí)現(xiàn)時(shí)鐘效果實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Swift利用純代碼實(shí)現(xiàn)時(shí)鐘效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
swift中正確安全聲明一個(gè)單例的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于swift中如何正確安全聲明一個(gè)單例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法
這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03

