SwiftRecord 0.0.6

SwiftRecord 0.0.6

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布时间最后发布2017年1月
SwiftSwift 版本3.0
SPM支持 SPM

Zaid 维护。



SwiftRecord

ark 提供。对功能请求请发表 @arkverse。您提供的反馈非常受重视!

关于

类似于 ActiveRecord 样式的 Core Data 对象管理。非常方便并且易于使用。适用于任何和每一个 Core Data 项目。

完全使用 Swift 编写,并基于 ObjectiveRecord 进行深入研究。

创建、保存、删除和查询都非常简单。

  • 使用 [String:AnyObject] 字典进行创建、查询或排序
  • 使用 String 进行查询和排序,例如 name == 'someName'date ASC
  • 如果您愿意,使用 NSPredicateNSSortDescriptor/[NSSortDescriptor] 进行查询和排序

现在支持为您的 NSManagedObject 子类设置自动递增 ID

此库还能为您读取 json 字典。包括自动的 camelCase 转换,例如从服务器到本地的 first_namefirstName。您还可以自定义字典映射。更多详细信息请参见 映射部分

对象关系也由字典生成,但默认是禁用的。将 SwiftRecord.generateRelationships 设置为 true 以启用此功能。请参阅 关系部分

访问 ark 了解更多有关 SwiftRecord 的入门友好引导

检查我们的 UIClosures 库

如果您喜欢 SwiftRecord,请在推特上分享! tweet button

目录

  1. 安装
  2. 创建、保存、删除
  3. 查询
  4. 排序、限制
  5. 聚合
  6. 自定义 coredata
  7. 映射
  8. 关系
  9. 自动递增

安装

手动安装

Classes/SwiftRecord.swiftSwiftRecord.framework拖放到您的项目中

用法

  1. 在每个NSManagedObject swift 类的顶部添加

    import SwiftRecord
    
    @objc(Event)
    class Event: NSManagedObject {
        @NSManaged var eventID: NSNumber
        @NSManaged var name: String
        @NSManaged var type: String
        @NSManaged var when: NSDate
        @NSManaged var creator: User
        @NSManaged var attendess: NSSet
    }
  2. 通过命名模型文件为MyAppName.xcdatamodel来设置Core Data。您可以选择通过调用SwiftRecored.sharedRecord.modelName = "mymodelname"来设置自己的模型名称

创建、保存和删除

var event = Event.create() as! Event // Downcasts are necessary, 
event.type = "Birthday"
event.when = NSDate()
event.save() // simple save
event.delete() // simple delete

var properties: [String:AnyObject] = ["name":"productQA","type":"meeting", "when":NSDate()]
var meeting = Event.create(properties) as! Event // Remember to downcast

注意:使用Swift的一个缺点是,返回的是NSManagedObject[NSManagedObject](数组),所以API调用必须向下转换为您的类类型。请随意始终强制向下转换。MyObject调用将始终创建MyObject,除非您的类找不到

*instancetypeSelf在Swift中刚刚被加入,但仍然不是很实用

查询

轻松地对您的实体进行查询。查询接受可选的条件、排序和限制参数。

// grab all Events
var events = Event.all() as! [Event]

// all past events before now
var pastEvents = Event.query("when < %@", NSDate()) as! [Event]

// specific event, yes we have support for format&arguments. Note, finding specific events return optional vars
var thisEvent = Event.find("name == %@ AND when == %@", "productQA", NSDate()) as? Event

// Use dictionaries to query too
var birthdayEvents = Event.query(["type":"birthday"]) as! [Event]

// or NSPredicates
var predicate = NSPredicate("type == %@", "meeting")
var meetingEvents = Event.query(predicate) as! [Event]

排序和限制

// Events sorted by date, defaults to ascending
var events = Event.all(sort: "when") as! [Event]
// Descending
var descendingEvents = Event.all(sort:["when":"DESC"]) as! [Event]
// or
var descEvents = Event.all(sort:"when DESC, eventID ASC")

// All meeting events sorted by when desc and eventID ascending and limit 10
var theseEvents = Event.query(["type":"meeting"], sort:["when":"DESC","eventID":"ASC"], limit: 10) as! [Event]

// NSSortDescriptor as sort arg (or array of NSSortDescriptors
Event.all(sort: NSSortDescriptor(key:"when",ascending:true))

聚合

// count all Events
var count = Event.count()

// count meeting Events
var count = Event.count("type == 'meeting'")

自定义Core Data

自定义ManagedObjectContext

如果您创建了自定义的,请随意设置它

var myContext: NSManagedObjectContext = ...

SwiftRecord.sharedRecord.managedObjectContext = myContext

自定义CoreData模型或.sqlite数据库

如果您设置了自定义上下文,请勿设置这些。如果您有与您的应用程序名称不同的modelName,则设置它。如果您想要不同的数据库名称,则设置它。

SwiftRecord.sharedRecord.modelName = "MyModelName"
SwiftRecord.sharedRecord.databaseName = "custom_database_name"

映射

大多数情况下,您的JSON Web服务返回的键类似first_namelast_name等。
您的Swift实现具有camelCased属性 - firstNamelastName

我们会自动检查与camelCase变体。

如果您有不同的变体,请重写static func mappings() -> [String:String]来指定您本地到远程键的映射

键字符串是您的本地名称,值字符串是您的远程名称。

// this method is called once, so you don't have to do any caching / singletons
class Event: NSManagedObject {

override class func mappings() -> [String:String] {
    return ["localName":"remoteName","eventID":"_id","attendees":"people"]
}
  // firstName => first_name is automatically handled
}

@end

关系

虽然不建议,但是您可以将您的NSManagedObject关系存储在字典中,并且它们将被填充,但首先您必须通过设置来启用它

SwiftRecord.generateRelationships = true

一旦设置了此选项,您的关系将填充,即

var personDict = ["email":"[email protected]","firstName":"zaid"]
var eventDict = ["name":"product QA meeting","when":NSDate(),"creator":personDict]
var event = Event.create(eventDict) as! Event
var person: Person = event.creator
println(person.username)

自动递增

如果希望SwiftRecord为您管理自动递增ID属性,通过重写autoIncrementingId()并返回您的ID属性键来启用它

public class Event: NSManagedObject {

   override public func autoIncrementingId() -> String? {
       return "eventId"
   }

注意,这将设置ID属性,前提是一个ID属性没有被提供。如果您设置了您自己的对象的id,您将会有重复的ID。例如,自动递增是ID 150,您创建一个具有ID 200的对象,自动递增最终也会创建ID为200的对象。在Core Data中强制唯一性代价太大。

测试

ObjectiveRecord支持CoreData的内存存储。在任何地方,在您的测试开始运行之前,只调用

SwiftRecord.sharedRecord.useInMemoryStore()

路线图

  • 提高Swiftiness
  • JSON生成
  • 可能在关系初始化中添加NSOrderedSet支持
  • 支持Realm
  • 更好的类型

许可证

SwiftRecord可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。

了解我们更多内容,请访问ark

ga tracker