RealmS 4.0.1

RealmS 4.0.1

测试测试版
Lang语言 SwiftSwift
许可证 MIT
发布最新发布2018年11月
SPM支持 SPM

DaoNVDai Ho V. 维护。



 
依赖
RealmSwift~> 3.0
ObjectMapper~> 3.0
 

RealmS 4.0.1

  • 作者
  • Dao Nguyen

Build Status CocoaPods Compatible Platform Coverage Status

RealmSwift ObjectMapper

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 后将被清理。