Realm

Realm 是一个直接在手机、平板电脑或可穿戴设备中运行的移动数据库。这个存储库包含 iOSmacOStvOSwatchOS 版本的 Realm SwiftRealm Objective-C 的源代码。

github 下的地址在这里。

使用领域

  • 对开发人员直观: Realm 的面向对象数据模型易于学习,不需要 ORM,并且可以让您编写更少的代码。
  • 专为离线使用而设计: Realm 的本地数据库将数据保存在磁盘上,因此应用程序离线工作与在线工作一样好。
  • 专为移动设备打造: Realm 功能齐全、重量轻,可有效利用内存、磁盘空间和电池寿命。

面向对象:简化您的代码

Realm 是为移动开发人员构建的,并考虑到了简单性。惯用的、面向对象的数据模型可以为您节省数千行代码。

// Define your models like regular Swift classes
class Dog: Object {@Persisted var name: String@Persisted var age: Int
}
class Person: Object {@Persisted(primaryKey: true) var _id: String@Persisted var name: String@Persisted var age: Int// Create relationships by pointing an Object field to another Class@Persisted var dogs: List<Dog>
}
// Use them like regular Swift objects
let dog = Dog()
dog.name = "Rex"
dog.age = 1
print("name of dog: \(dog.name)")// Get the default Realm
let realm = try! Realm()
// Persist your data easily with a write transaction
try! realm.write {realm.add(dog)
}

Live Objects

Realm 的活动对象意味着在任何地方更新的数据都会在任何地方自动更新。

// Open the default realm.
let realm = try! Realm()var token: NotificationToken?let dog = Dog()
dog.name = "Max"// Create a dog in the realm.
try! realm.write {realm.add(dog)
}//  Set up the listener & observe object notifications.
token = dog.observe { change inswitch change {case .change(let properties):for property in properties {print("Property '\(property.name)' changed to '\(property.newValue!)'");}case .error(let error):print("An error occurred: (error)")case .deleted:print("The object was deleted.")}
}// Update the dog's name to see the effect.
try! realm.write {dog.name = "Wolfie"
}

SwiftUI

Realm 直接与 SwiftUI 集成,无需更新视图即可。

struct ContactsView: View {@ObservedResults(Person.self) var personsvar body: some View {List {ForEach(persons) { person inText(person.name)}.onMove(perform: $persons.move).onDelete(perform: $persons.remove)}.navigationBarItems(trailing:Button("Add") {$persons.append(Person())})}
}

完全加密

数据可以在动态和静态加密,即使是最敏感的数据也能保持安全。

// Generate a random encryption key
var key = Data(count: 64)
_ = key.withUnsafeMutableBytes { bytes inSecRandomCopyBytes(kSecRandomDefault, 64, bytes)
}// Add the encryption key to the config and open the realm
let config = Realm.Configuration(encryptionKey: key)
let realm = try Realm(configuration: config)// Use the Realm as normal
let dogs = realm.objects(Dog.self).filter("name contains 'Fido'")

数据同步

设备同步服务让用户、设备和后端之间的数据实时同步变得简单。

Github每日精选(第35期):移动设备数据库Realm相关推荐

  1. Github每日精选(第56期):支持多语言的文字识别EasyOCR

    EasyOCR EasyOCR一款好用的OCR,支持80多种语言和所有流行的书写脚本,包括拉丁语.汉语.阿拉伯语.德瓦纳加里语.西里尔语等. OCR (Optical Character Recogn ...

  2. Github每日精选(第65期):手机自动化测试工具maestro

    Maestro 现在手机ui的测试工具已经很多了,为什么还要多一款Maestro 呢?我们来看看Maestro 的介绍. Maestro 是为您的移动应用程序自动化 UI 测试的最简单方法. gith ...

  3. Github每日精选(第23期):macOS下的开源清理工具lemon-cleaner

    lemon-cleaner柠檬清理 lemon-cleaner 柠檬清理,开源没几天就获得了3k个点赞,大家对macos 下的清理工具兴趣还是很大的. github下的地址在这里. 腾讯柠檬清理是针对 ...

  4. Github每日精选(第64期):IOS永久免费签名-TrollStore

    TrollStore 这几天,对github上的监控来看,TrollStore 的星数,飙升最快.看来大家对 ios的签名需求还是非常的强烈. 我们都知道没有在app store 上架的app,要能够 ...

  5. Github每日精选(第24期):python的浏览器MechanicalSoup

    MechanicalSoup 可能你看到MechanicalSoup,就会想起BeautifulSoup,是的,这两个的功能用起来差不多,只是MechanicalSoup做的更多一点. Mechani ...

  6. Github每日精选(第48期):SQLite下的知识库memos

    memos memos 是一个开源的.自托管的知识库,可与 SQLite db 文件一起使用. 使用SQLite db还是很有必要的,因为有的时候我们需要把我们的日志进行转移,直接把数据库拷走就可以了 ...

  7. Github每日精选(第21期):开源文件同步syncthing

    syncthing syncthing是一个持续的文件同步程序.它在两台或多台计算机之间同步文件.我们努力实现以下目标.目标按重要性顺序列出,最重要的是第一个.这是目标列表的摘要版本 - 如需更多评论 ...

  8. Github每日精选(第77期):Go (Golang) 编写的 HTTP Web 框架gin

    Gin Gin 是一个用 Go (Golang) 编写的 Web 框架.由于httprouter,它具有类似 martini 的 API,性能提高了 40 倍.如果您需要性能和良好的生产力,您一定会喜 ...

  9. Github每日精选(第79期):虚拟数据生成库faker

    faker Faker是一个Python包,可以为你生成假数据.无论您是需要引导您的数据库.创建美观的 XML 文档.填写您的持久性以对其进行压力测试,还是对从生产服务中获取的数据进行匿名化,Fake ...

  10. Github每日精选(第75期):colly 爬取网站所有的数据

    colly colly 是一个优雅的 Golang 爬虫框架. colly 提供了一个干净的接口来编写任何类型的爬虫/scraper/spider. 使用 Colly,您可以轻松地从网站中提取结构化数 ...

最新文章

  1. FileUpload生成图片水印,文字水印(转载)
  2. bios x86保护模式下的软盘操作floppy
  3. Educational Codeforces Round 41 E. Tufurama (961E)
  4. 关于epoll,select,poll的理解
  5. 怎样去理解@ComponentScan注解
  6. mysql Error 1045(28000)
  7. 死磕 java集合之TreeMap源码分析(一)- 内含红黑树分析全过程
  8. Verilog代码实例化的简单理解(以38译码器为例)
  9. 顺序表和链表的优缺点
  10. 信息系统管理工程师记忆口诀
  11. 计算机windows7桌面是指什么,认识Windows 7桌面,增加了哪些功能,它是应用程序操作的出发点...
  12. 深大校园网掉线/Drcom掉线/使校园网保持在线V2.0+Linux端Drcom登录方法(宿舍区教学区)
  13. 建设智慧城市和智慧园区的必要性和趋势是什么?
  14. 计算机组成:真正理解“乘法器”和“除法器”
  15. C语言课设手机电话簿管理系统(大作业)
  16. ASCII Grid
  17. 敏涵控股集团刘敏:一个85后创业者的民族使命
  18. 苹果手机(IOS)下载不上安装不上charles证书(不弹出下载框)终极解决办法
  19. ArcGIS 9.3 下载
  20. 记录springBoot项目使用jar包中的mapper报错问题

热门文章

  1. 异数OS 织梦师-水桶(三)-- RAM共享存储方案
  2. PHP如何判断图片是否伪造
  3. LOJ10068 秘密的牛奶运输
  4. Python初学系列——天天向上的力量
  5. 5G和4G有那些区别
  6. python实现车牌识别系统
  7. csdn网友提出关于expdp exclude及impdp问题解答
  8. WebRTC桌面共享手动停止
  9. Digispark ATtiny85配合Prismatik软件DIY屏幕流光溢彩效果(见坑填坑)
  10. oa软件测试用例,OA系统测试用例.doc