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

swift 3.0中realm封裝類示例代碼

 更新時間:2017年10月13日 11:48:04   作者:迷路的洞二  
這篇文章主要給大家介紹了關(guān)于swift 3.0中realm封裝類的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用swift具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

如果你用夠了FMDB或者CoreData,不妨試試realm,本文主要給大家介紹了關(guān)于swift 3.0中realm封裝類的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來一起看看吧。

最新更新,特別感謝@deepindo

 /// 查詢排序后所有數(shù)據(jù),關(guān)鍵詞及是否升序
 static func selectScoretByAll<T: Object>(_: T.Type ,key: String, isAscending: Bool) -> Results<T>{
  return sharedInstance.objects(T.self).sorted(byProperty: key, ascending: isAscending)
 }
import UIKit
import RealmSwift

class ZYWRealm: NSObject {

 
 /// realm 數(shù)據(jù)庫的名稱
 static let username = "MY-DB"
 
 static let sharedInstance = try! Realm()
 
 //--MARK: 初始化 Realm
 /// 初始化進過加密的 Realm, 加密過的 Realm 只會帶來很少的額外資源占用(通常最多只會比平常慢10%)
 static func initEncryptionRealm() {
  // 說明: 以下內(nèi)容是可以合并操作的,但為了能最大限度的展示各個操作內(nèi)容,故分開設(shè)置 Realm
  
  // 產(chǎn)生隨機密鑰
  var key = Data(count: 64)
  
  _ = key.withUnsafeMutableBytes {mutableBytes in
   SecRandomCopyBytes(kSecRandomDefault, key.count, mutableBytes)
  }
 
  // 獲取加密 Realm 文件的配置文件
  var config = Realm.Configuration(encryptionKey: key)
  
  // 使用默認的目錄,但是使用用戶名來替換默認的文件名
  config.fileURL = config.fileURL!.deletingLastPathComponent().appendingPathComponent("\(username).realm")
  
  // 獲取我們的 Realm 文件的父級目錄
  let folderPath = config.fileURL!.deletingLastPathComponent().path
  
  /**
   * 設(shè)置可以在后臺應(yīng)用刷新中使用 Realm
   * 注意:以下的操作其實是關(guān)閉了 Realm 文件的 NSFileProtection 屬性加密功能,將文件保護屬性降級為一個不太嚴(yán)格的、允許即使在設(shè)備鎖定時都可以訪問文件的屬性
   */
  // 解除這個目錄的保護
   try! FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.none], ofItemAtPath: folderPath)

  
  // 將這個配置應(yīng)用到默認的 Realm 數(shù)據(jù)庫當(dāng)中
  Realm.Configuration.defaultConfiguration = config
  
 }
 
 /// 初始化默認的 Realm
 static func initRealm() {
  var config = Realm.Configuration()
  
  // 使用默認的目錄,但是使用用戶名來替換默認的文件名
   config.fileURL = config.fileURL!.deletingLastPathComponent().appendingPathComponent("\(username).realm")

  // 獲取我們的 Realm 文件的父級目錄
  let folderPath = config.fileURL!.deletingLastPathComponent().path
  
  // 解除這個目錄的保護
  try! FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.none],
               ofItemAtPath: folderPath)
  
  // 將這個配置應(yīng)用到默認的 Realm 數(shù)據(jù)庫當(dāng)中
  Realm.Configuration.defaultConfiguration = config
 }
 
 //--- MARK: 操作 Realm
 /// 做寫入操作
 static func doWriteHandler(_ clouse: @escaping ()->()) { // 這里用到了 Trailing 閉包
  try! sharedInstance.write {
   clouse()
  }
 }
 
 ///后臺做寫入操作
 
 static func BGDoWriteHandler(_ clouse: @escaping ()->()) {
  try! Realm().write {
   clouse()
  }
 }
 
 /// 添加一條數(shù)據(jù)
 static func addCanUpdate<T: Object>(_ object: T) {
  try! sharedInstance.write {
   sharedInstance.add(object, update: true)
  }
 }
 static func add<T: Object>(_ object: T) {
  try! sharedInstance.write {
   sharedInstance.add(object)
  }
 }
 /// 后臺單獨進程寫入一組數(shù)據(jù)
 static func addListDataAsync<T: Object>(_ objects: [T]) {
    
  
  let queue = DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default)
  // Import many items in a background thread
  queue.async {
   // 為什么添加下面的關(guān)鍵字,參見 Realm 文件刪除的的注釋
   autoreleasepool {
    // 在這個線程中獲取 Realm 和表實例
    let realm = try! Realm()
    // 批量寫入操作
    realm.beginWrite()
    // add 方法支持 update ,item 的對象必須有主鍵
    for item in objects {
     realm.add(item, update: true)
    }
    // 提交寫入事務(wù)以確保數(shù)據(jù)在其他線程可用
    try! realm.commitWrite()
   }
  }
 }
 
 static func addListData<T: Object>(_ objects: [T]) {
  autoreleasepool {
   // 在這個線程中獲取 Realm 和表實例
   let realm = try! Realm()
   // 批量寫入操作
   realm.beginWrite()
   // add 方法支持 update ,item 的對象必須有主鍵
   for item in objects {
    realm.add(item, update: true)
   }
   // 提交寫入事務(wù)以確保數(shù)據(jù)在其他線程可用
   try! realm.commitWrite()
  }
 }
 
 /// 刪除某個數(shù)據(jù)
 static func delete<T: Object>(_ object: T) {
  try! sharedInstance.write {
   sharedInstance.delete(object)
  }
 }
 
 /// 批量刪除數(shù)據(jù)
 static func delete<T: Object>(_ objects: [T]) {
  try! sharedInstance.write {
   sharedInstance.delete(objects)
  }
 }
 /// 批量刪除數(shù)據(jù)
 static func delete<T: Object>(_ objects: List<T>) {
  try! sharedInstance.write {
   sharedInstance.delete(objects)
  }
 }
 /// 批量刪除數(shù)據(jù)
 static func delete<T: Object>(_ objects: Results<T>) {
  try! sharedInstance.write {
   sharedInstance.delete(objects)
  }
 }
 
 /// 批量刪除數(shù)據(jù)
 static func delete<T: Object>(_ objects: LinkingObjects<T>) {
  try! sharedInstance.write {
   sharedInstance.delete(objects)
  }
 }
 
 
 /// 刪除所有數(shù)據(jù)。注意,Realm 文件的大小不會被改變,因為它會保留空間以供日后快速存儲數(shù)據(jù)
 static func deleteAll() {
  try! sharedInstance.write {
   sharedInstance.deleteAll()
  }
 }
 
 /// 根據(jù)條件查詢數(shù)據(jù)
 static func selectByNSPredicate<T: Object>(_: T.Type , predicate: NSPredicate) -> Results<T>{
  return sharedInstance.objects(T.self).filter(predicate)
 }
 
 /// 后臺根據(jù)條件查詢數(shù)據(jù)
 static func BGselectByNSPredicate<T: Object>(_: T.Type , predicate: NSPredicate) -> Results<T>{
  return try! Realm().objects(T.self).filter(predicate)
 }

 
 /// 查詢所有數(shù)據(jù)
 static func selectByAll<T: Object>(_: T.Type) -> Results<T>{
   return sharedInstance.objects(T.self)
 }
 //--- MARK: 刪除 Realm
 /*
  參考官方文檔,所有 fileURL 指向想要刪除的 Realm 文件的 Realm 實例,都必須要在刪除操作執(zhí)行前被釋放掉。
  故在操作 Realm實例的時候需要加上 autoleasepool 。如下:
  autoreleasepool {
  //所有 Realm 的使用操作
  }
  */
 /// Realm 文件刪除操作
 static func deleteRealmFile() {
  let realmURL = Realm.Configuration.defaultConfiguration.fileURL!
  let realmURLs = [
   realmURL,
   realmURL.appendingPathExtension("lock"),
   realmURL.appendingPathExtension("log_a"),
   realmURL.appendingPathExtension("log_b"),
   realmURL.appendingPathExtension("note")
  ]
  let manager = FileManager.default
  for URL in realmURLs {
   do {
    try manager.removeItem(at: URL)
   } catch {
    // 處理錯誤
   }
  }
  
 }
}

總結(jié)

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

相關(guān)文章

  • Swift使用SnapKit模仿Kingfisher第三方擴展優(yōu)化

    Swift使用SnapKit模仿Kingfisher第三方擴展優(yōu)化

    這篇文章主要為大家介紹了Swift?SnapKit模仿Kingfisher第三方擴展優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Swift調(diào)用Objective-C代碼

    Swift調(diào)用Objective-C代碼

    目前Swift語言所編寫的應(yīng)用才剛剛可以使用Xcode 6 GM版本提交,而Objective-C作為蘋果的主開發(fā)語言存在了很多年了。目前尚無成熟的Swift庫可用,所以當(dāng)前編寫應(yīng)用可以說基本離不開調(diào)用Objective-C代碼的情況。
    2014-09-09
  • Swift data范圍截取問題解決方案

    Swift data范圍截取問題解決方案

    這篇文章主要介紹了Swift data范圍截取問題解決方案,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Swift編程之枚舉類型詳解

    Swift編程之枚舉類型詳解

    這篇文章主要介紹了Swift編程之枚舉類型,講解了枚舉語法、匹配枚舉值與switch語句、關(guān)聯(lián)值、原始值等內(nèi)容,Swift中枚舉類型是最重要的類型,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Swift實現(xiàn)表格視圖單元格單選(1)

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

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

    Swift中的限定擴展詳析

    擴展就是向一個已有的類、結(jié)構(gòu)體或枚舉類型添加新功能。下面這篇文章主要給大家介紹了關(guān)于Swift中限定擴展的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2018-03-03
  • 詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    懸浮操作按鈕(Floating Action Button, FAB)是一種在 Android 和 Material Design 中使用的 UI 元素,它用于觸發(fā)特定屏幕的主要操作,下面我們就來詳細介紹一下如何在SwiftUI中創(chuàng)建懸浮操作按鈕,需要的朋友可以參考下
    2023-10-10
  • Swift 字符串類型及常用方法詳解總結(jié)

    Swift 字符串類型及常用方法詳解總結(jié)

    Swift 字符串是一系列字符的集合。例如 "Hello, World!" 這樣的有序的字符類型的值的集合,它的數(shù)據(jù)類型為 String,接下來文章將詳細探討
    2021-11-11
  • swift?framework使用OC?代碼兩種方式示例

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

    這篇文章主要為大家介紹了swift?framework使用OC?代碼兩種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 深入理解Swift中的訪問控制關(guān)鍵字

    深入理解Swift中的訪問控制關(guān)鍵字

    這篇文章主要給大家介紹了Swift中訪問控制關(guān)鍵字的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03

最新評論

铜川市| 获嘉县| 河西区| 梁平县| 石棉县| 隆林| 潼南县| 卓尼县| 玉环县| 金寨县| 大安市| 新民市| 马公市| 绥芬河市| 奉节县| 南澳县| 胶州市| 云和县| 安图县| 宜川县| 佛坪县| 偃师市| 双鸭山市| 彩票| 武安市| 水城县| 沈阳市| 眉山市| 尚志市| 江川县| 合川市| 霍林郭勒市| 定西市| 手游| 福安市| 呼图壁县| 军事| 平原县| 东平县| 青田县| 长沙市|