最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄

 更新時間:2017年12月05日 09:55:12   作者:非典型技術(shù)宅  
這篇文章主要給大家介紹了關(guān)于Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

我們在上一篇文章簡單的實現(xiàn)了一個通訊錄,說是通訊錄實際上就只是一個簡簡單單的Name List。這次我們要往這個通訊錄里面加入更多的元素,目的也是為了學(xué)習(xí)CoreData如何存儲更多的數(shù)據(jù)類型。下面話不多說了,來隨著小編一起看看詳細(xì)的介紹吧。

完成后的效果:


1. CoreData支持存儲數(shù)據(jù)類型


咦?這里面有兩個好像很少看到的類型:Binary Data、Decimal、Transformable。這些都是神馬東西?

1.1 Binary Data

顧名思義,就是二進(jìn)制數(shù)據(jù)。對應(yīng)到OC中就是NSData, Swift里面就是Data數(shù)據(jù)類型。

我們這次就試試在通訊里面存儲一下圖片,把圖片變成Binary Data進(jìn)行存儲。

1.2 Decimal

Decimal為SQL Server、MySql等數(shù)據(jù)庫的一種數(shù)據(jù)類型,不屬于浮點數(shù)類型,可以在定義時劃定整數(shù)部分以及小數(shù)部分的位數(shù)。使用精確小數(shù)類型不僅能夠保證數(shù)據(jù)計算更為精確,還可以節(jié)省儲存空間。

Decimal(n,m)表示數(shù)值中共有n位數(shù),其中整數(shù)n-m位,小數(shù)m位。例:decimal(10,6),數(shù)值中共有10位數(shù),其中整數(shù)占4位,小數(shù)占6位。

問題來了,Decimal(2,1):

1, 插入數(shù)據(jù)“12”會怎樣?

會出現(xiàn)數(shù)據(jù)移除的錯誤。

2, 插入”1.2345“會怎樣?

會自動四舍五入成1.2

3, 插入2,會怎樣?

會自動補(bǔ)充成2.0,以確保2位的有效長度和1位的小數(shù)。

1.3 Transformable

這個類型就比較搞了,有人說它是萬能類型,有人說它只要是對象就都可以。

在官方文檔里面,Core Data Release Notes for OS X v10.5 是這么介紹的:

Transformable Attributes
There's a new "transformable" type for NSManagedObject attributes that allows you more easily support attribute types that Core Data doesn't support natively. You access an attribute as a non-standard type, but behind the scenes Core Data uses an instance of NSValueTransformer to convert the attribute to and from an instance of NSData. Core Data then stores the data instance to the persistent store.

If you don't specify a transformer, transformable attributes to use keyed archiving (NSKeyedUnarchiveFromDataTransformerName).

For more details, see Non-Standard Persistent Attributes.

說到底,這是一個非標(biāo)準(zhǔn)的類型。在中文中,非典型技術(shù)宅胖其實覺得翻譯成“其他”類型更貼切。哈哈~~就和有關(guān)部門一樣d=====( ̄▽ ̄*)b厲害。

有一點點小小需要注意的地方就是,數(shù)據(jù)類型要遵守NSCoding協(xié)議。只要遵守了,就可以使用這個厲害的存儲類型了。

來來來,舉幾個栗子。Dictionary、Array、Number等等都可以呀。。。

感情是個萬金油類型??!

2. 使用CoreData存儲多種數(shù)據(jù)類的通訊錄

我們在這里計劃存儲的類型有Data、Bool、String、Date、Int64。


2.1 CoreData的基本讀取操作

2. 1.1 獲取CoreData已經(jīng)保存數(shù)據(jù)的五個步驟

  • 獲取總代理和托管對象總管
  • 從Entity獲取一個fetchRequest
  • 根據(jù)fetchRequest,從managedContext中查詢數(shù)據(jù)
  • 保存。保存過程中可能會出錯,要做一下處理。
  • 添加到數(shù)組中

2.1.2 基本存儲

  • 獲取總代理和托管對象總管
  • 建立一個Entity
  • 保存內(nèi)容
  • 保存Entity到托管對象。如果保存失敗,進(jìn)行處理
  • 保存到數(shù)組中,更新UI

2.2 多種類型的存儲

let imgData = from.value(forKey: "avatar") as? Data
let isRelative = from.value(forKey: "isRelative") as? Bool
let name = from.value(forKey: "name") as? String
let updateTime = from.value(forKey: "updateTime") as? Date
let viewTimes = from.value(forKey: "viewTimes") as? Int64
let mobile = from.value(forKey: "mobile") as? String

來來來,就這樣輕松easy的把各種類型的都轉(zhuǎn)換好啦~ 然后就可以存入進(jìn)去了吶。

3. Codable

咱們通訊錄里面通常的做法都會把一個用戶的信息全部放在一個Model里面,然后只需要把Model存儲到庫里面就好了。這個怎么做呢?

在OC時代,當(dāng)需要將一個對象持久化時,需要把這個對象序列化,往常的做法是實現(xiàn) NSCoding 協(xié)議。

寫過的人應(yīng)該都知道實現(xiàn) NSCoding 協(xié)議的代碼寫起來很痛苦,特別想哭,尤其是當(dāng)屬性非常多的時候。

于是乎,Swift 4 中引入了 Codable 幫我們解決了這個問題。

struct User: Codable {
 var avatarImg: Data
 var isRelative: Bool
 var name: String
 var updateTime: Date
 var viewTimes: Int64
 var mobile: String 
}

如果我們想把User 對象的實例持久化,只需要讓 User 遵守 Codable 協(xié)議即可,Language 中不用寫別的代碼。這樣就可以直接把Userencode成JSON啦。

下一篇我們就不能再用Xcode創(chuàng)建自帶的CoreData來搞事情了,我們要自己搞一個CoreData Stack來實現(xiàn)管理。

所有的源代碼都在這里:

github地址:https://github.com/Stanbai/CoreDataDemo.git

源碼下載:http://xiazai.jb51.net/201712/yuanma/CoreDataDemo(jb51.net).rar

總結(jié)

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

相關(guān)文章

  • swift如何利用系統(tǒng)庫將漢字轉(zhuǎn)換為拼音詳解

    swift如何利用系統(tǒng)庫將漢字轉(zhuǎn)換為拼音詳解

    將漢字轉(zhuǎn)換為拼音更利于我們大家開發(fā)搜索功能,所以這篇文章主要給大家介紹了關(guān)于swift如何利用系統(tǒng)庫將漢字轉(zhuǎn)換為拼音的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • swift?framework使用OC?代碼兩種方式示例

    swift?framework使用OC?代碼兩種方式示例

    這篇文章主要為大家介紹了swift?framework使用OC?代碼兩種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Swift實現(xiàn)“或”操作符的3種方法示例

    Swift實現(xiàn)“或”操作符的3種方法示例

    這篇文章主要給大家介紹了關(guān)于Swift實現(xiàn)“或”操作符的3種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Swift實現(xiàn)快速排序算法的代碼示例

    Swift實現(xiàn)快速排序算法的代碼示例

    這篇文章主要介紹了Swift實現(xiàn)快速排序算法的代碼示例,首先利用分治法講解了快速排序的思路,需要的朋友可以參考下
    2016-07-07
  • Combine中錯誤處理和Scheduler使用詳解

    Combine中錯誤處理和Scheduler使用詳解

    這篇文章主要為大家介紹了Combine中錯誤處理和Scheduler使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Swift實現(xiàn)表格視圖單元格單選(1)

    Swift實現(xiàn)表格視圖單元格單選(1)

    這篇文章主要為大家詳細(xì)介紹了Swift實現(xiàn)表格視圖單元格單選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解swift中xcworkspace多項目管理

    詳解swift中xcworkspace多項目管理

    給大家詳細(xì)講解了IOS開發(fā)中swift語言xcworkspace多項目管理的方法和介紹,一起參考一下。
    2017-11-11
  • Swift類型創(chuàng)建之自定義一個類型詳解

    Swift類型創(chuàng)建之自定義一個類型詳解

    這篇文章主要介紹了Swift類型創(chuàng)建之自定義一個類型詳解,本文講解了自定義原型、實現(xiàn)默認(rèn)值、支持基本布爾型初始化、支持Bool類型判斷、支持兼容各們各派的類型、完善OCBool的布爾基因體系等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Swift里的值類型與引用類型區(qū)別和使用

    Swift里的值類型與引用類型區(qū)別和使用

    這篇文章主要介紹了Swift里的值類型與引用類型區(qū)別和使用,本文講解了值類型與引用類型的區(qū)別、如何選擇類型、什么時候該用值類型、什么時候該用引用類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計

    Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計

    這篇文章主要介紹了Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計,幫助大家更好的進(jìn)行ios開發(fā),感興趣的朋友可以了解下
    2020-10-10

最新評論

枣庄市| 东源县| 中超| 卢龙县| 双辽市| 敖汉旗| 新平| 远安县| 沂源县| 古蔺县| 鄂尔多斯市| 若羌县| 舒城县| 无棣县| 沅陵县| 陆良县| 论坛| 卓资县| 樟树市| 北碚区| 钟祥市| 漳州市| 夏邑县| 钦州市| 十堰市| 通山县| 巢湖市| 富川| 湘潭县| 灵寿县| 汕尾市| 平陆县| 富锦市| 九寨沟县| 唐海县| 东方市| 宕昌县| 嘉鱼县| 张北县| 大洼县| 淳化县|