Realm + ObjectMapper
要求
- iOS 8.0+
- Xcode 9.2 (Swift 4.0+)
安装
内嵌框架需要 iOS 8 及以上版本的最低部署目标
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
需要 CocoaPods 1.2+ 版本来构建 RealmS 2.3+
要使用 CocoaPods 集成 RealmS 到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
pod 'RealmS', '~> 4.0.0'
然后,运行以下命令
$ pod install
使用
映射
规则
- 具有
primaryKey
的对象必须是 StaticMappable (i) - 没有
primaryKey
的对象应该是 Mappable (ii)
import RealmSwift
import ObjectMapper
import RealmS
// (i)
final class User: Object, StaticMappable {
@objc dynamic var id: String!
@objc dynamic var name: String?
@objc dynamic var address: Address?
let dogs = List<Pet>()
override class func primaryKey() -> String? {
return "id"
}
func mapping(map: Map) {
name <- map["name"]
address <- map["address"]
dogs <- map["dogs"]
}
static func objectForMapping(map: Map) -> BaseMappable? {
return RealmS().object(ofType: self, forMapping: map)
}
}
// (ii)
final class Address: Object, Mappable {
@objc dynamic var street = ""
@objc dynamic var city = ""
@objc dynamic var country = ""
@objc dynamic var phone: Phone?
let users = LinkingObjects(fromType: User.self, property: "address")
convenience required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
street <- map["street"]
city <- map["city"]
country <- map["country"]
phone <- map["phone"]
}
}
将 JSON 导入 Realm
let realm = RealmS()
realm.write {
realm.map(User.self, jsUser) // map JSON object
realm.map(Shop.self, jsShops) // map JSON array
}
nil
值将被忽略,如果需要设置nil
,请使用NSNull()
代替。
清理
extension User {
override public class func relativedTypes() -> [Object.Type] {
return [Address.self, Pet.self]
}
override public class func clean() { }
}
extension Address {
override class func relativedTypes() -> [Object.Type] {
return [Phone.self]
}
override class func clean() {
let realm = RealmS()
let objs = realm.objects(self).filter("users.@count = 0")
realm.write {
realm.delete(objs)
}
}
}
Address
表在从 Realm 删除 User
后将被清理。