Github每日精选(第35期):移动设备数据库Realm
Realm
Realm
是一个直接在手机、平板电脑或可穿戴设备中运行的移动数据库。这个存储库包含 iOS
、macOS
、tvOS
和 watchOS
版本的 Realm Swift
和 Realm 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相关推荐
- Github每日精选(第56期):支持多语言的文字识别EasyOCR
EasyOCR EasyOCR一款好用的OCR,支持80多种语言和所有流行的书写脚本,包括拉丁语.汉语.阿拉伯语.德瓦纳加里语.西里尔语等. OCR (Optical Character Recogn ...
- Github每日精选(第65期):手机自动化测试工具maestro
Maestro 现在手机ui的测试工具已经很多了,为什么还要多一款Maestro 呢?我们来看看Maestro 的介绍. Maestro 是为您的移动应用程序自动化 UI 测试的最简单方法. gith ...
- Github每日精选(第23期):macOS下的开源清理工具lemon-cleaner
lemon-cleaner柠檬清理 lemon-cleaner 柠檬清理,开源没几天就获得了3k个点赞,大家对macos 下的清理工具兴趣还是很大的. github下的地址在这里. 腾讯柠檬清理是针对 ...
- Github每日精选(第64期):IOS永久免费签名-TrollStore
TrollStore 这几天,对github上的监控来看,TrollStore 的星数,飙升最快.看来大家对 ios的签名需求还是非常的强烈. 我们都知道没有在app store 上架的app,要能够 ...
- Github每日精选(第24期):python的浏览器MechanicalSoup
MechanicalSoup 可能你看到MechanicalSoup,就会想起BeautifulSoup,是的,这两个的功能用起来差不多,只是MechanicalSoup做的更多一点. Mechani ...
- Github每日精选(第48期):SQLite下的知识库memos
memos memos 是一个开源的.自托管的知识库,可与 SQLite db 文件一起使用. 使用SQLite db还是很有必要的,因为有的时候我们需要把我们的日志进行转移,直接把数据库拷走就可以了 ...
- Github每日精选(第21期):开源文件同步syncthing
syncthing syncthing是一个持续的文件同步程序.它在两台或多台计算机之间同步文件.我们努力实现以下目标.目标按重要性顺序列出,最重要的是第一个.这是目标列表的摘要版本 - 如需更多评论 ...
- Github每日精选(第77期):Go (Golang) 编写的 HTTP Web 框架gin
Gin Gin 是一个用 Go (Golang) 编写的 Web 框架.由于httprouter,它具有类似 martini 的 API,性能提高了 40 倍.如果您需要性能和良好的生产力,您一定会喜 ...
- Github每日精选(第79期):虚拟数据生成库faker
faker Faker是一个Python包,可以为你生成假数据.无论您是需要引导您的数据库.创建美观的 XML 文档.填写您的持久性以对其进行压力测试,还是对从生产服务中获取的数据进行匿名化,Fake ...
- Github每日精选(第75期):colly 爬取网站所有的数据
colly colly 是一个优雅的 Golang 爬虫框架. colly 提供了一个干净的接口来编写任何类型的爬虫/scraper/spider. 使用 Colly,您可以轻松地从网站中提取结构化数 ...
最新文章
- FileUpload生成图片水印,文字水印(转载)
- bios x86保护模式下的软盘操作floppy
- Educational Codeforces Round 41 E. Tufurama (961E)
- 关于epoll,select,poll的理解
- 怎样去理解@ComponentScan注解
- mysql Error 1045(28000)
- 死磕 java集合之TreeMap源码分析(一)- 内含红黑树分析全过程
- Verilog代码实例化的简单理解(以38译码器为例)
- 顺序表和链表的优缺点
- 信息系统管理工程师记忆口诀
- 计算机windows7桌面是指什么,认识Windows 7桌面,增加了哪些功能,它是应用程序操作的出发点...
- 深大校园网掉线/Drcom掉线/使校园网保持在线V2.0+Linux端Drcom登录方法(宿舍区教学区)
- 建设智慧城市和智慧园区的必要性和趋势是什么?
- 计算机组成:真正理解“乘法器”和“除法器”
- C语言课设手机电话簿管理系统(大作业)
- ASCII Grid
- 敏涵控股集团刘敏:一个85后创业者的民族使命
- 苹果手机(IOS)下载不上安装不上charles证书(不弹出下载框)终极解决办法
- ArcGIS 9.3 下载
- 记录springBoot项目使用jar包中的mapper报错问题