国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

swift4更新中所遇到的一些問題總結(jié)

2020-03-09 17:42:47
字體:
供稿:網(wǎng)友

前言

最近Swift 4發(fā)布了,完整的更新日志請點擊這里 >>: ,我大概看了下官方的更新日志,因為xcode9同時支持Swift4和Swift3.2,所以在升級Swift4的時候心沒有那么的痛,在轉(zhuǎn)換成Swift4時錯誤集中在添加@objc上,如果項目是OC和Swift共存的項目,那么添加@objc會讓你加到懷疑人生。

下面主要給大家介紹了在更新過程中遇到的一些問題,下面話不多說了,來一起看看詳細(xì)的介紹吧。

@objc

1、在Swift4中,OC和Swift共存的項目不再無腦將Swift的Public屬性和方法提供給OC,除非Swift中的方法和屬性用@objc標(biāo)記,這樣就減少了一些代碼的生成從而減少了包的大小。build之后我們是純swift/81032.html">swift項目所以大部分是在選擇器調(diào)用的方法前面也要添加@objc。

2、我們的項目是Swift的項目所以build保存很快就修改完成,Run起來后如期的Crash了。這個是因為我們的JSON轉(zhuǎn)Model是使用的OC版的Mantle和SwiftJSON進(jìn)行的解析,那么就要在所有的Model屬性前面添加@objc,不然Mantle在獲取類屬性類型的時候是空的。看到這個時候內(nèi)心是崩潰和拒絕升級Swift4的,所以我們選擇舍棄Mantle使用Codable。

Codable( 官方文檔)

1、在OC中JSON轉(zhuǎn)Model只能轉(zhuǎn)化為對象類型,在Codable支持JSON轉(zhuǎn)為常規(guī)類型。而遇到的更多的是將數(shù)據(jù)模型中的NSNumber改為Int或者Double,這是因為NSNumber是OC的類型不遵守Codable的。

2、有時候我們會在Model中添加一些JSON串沒有的字段進(jìn)行邏輯處理,類似

struct A: Codable{ var a: Int?  var isSelect: Bool = false}

因為"isSelect"是為了邏輯處理在JSON串中并不能找到相應(yīng)的字段,這個時候就會報出數(shù)據(jù)丟失的錯誤,而我們只需要將“isSelect”改成可選就可以了。

stuct A: Codable { var a: Int? var isSelect: Bool?}

在這次升級中主要是在改這OC調(diào)用Swift添加@objc的問題和將數(shù)據(jù)解析改成Codable。還有一些錯誤是因為使用Mantle轉(zhuǎn)JSON串出現(xiàn)的問題只要使用JSONEncode,還有會多出字符串長度判斷使用characters的警告刪除它就OK了。

平常使用泛型一個很煩的操作

我定義一個帶有泛型的方法

private func getData<T>(a: T) {}

直接調(diào)用

self.getData<A>(a)

因為不知道泛型的類型而出現(xiàn)

Cannot explicitly specialize a generic function

的錯誤,  如果不指定類型

self.getData(a)

會出現(xiàn)下面的額錯誤

Generic parameter 'Element' could not be inferred

只能在使用時進(jìn)行一次強(qiáng)轉(zhuǎn)

self.getData(a as A)

就是讓Xcode推斷出他的類型而不是你告訴他這個泛型是什么類型,這就很煩。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 上栗县| 汝城县| 黄平县| 外汇| 昌邑市| 泾川县| 石台县| 崇文区| 武功县| 增城市| 德阳市| 海伦市| 云霄县| 钟祥市| 南安市| 额尔古纳市| 禹州市| 桑植县| 铁力市| 喀什市| 云梦县| 清涧县| 当涂县| 自贡市| 乌兰察布市| 辛集市| 通道| 长子县| 麻城市| 宜良县| 大厂| 阜新| 西充县| 通许县| 青冈县| 溆浦县| 工布江达县| 新乡县| 贵溪市| 兴化市| 武汉市|