测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布时间最后发布 | 2017年1月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Zaid 维护。
由 ark 提供。对功能请求请发表 @arkverse。您提供的反馈非常受重视!
类似于 ActiveRecord 样式的 Core Data 对象管理。非常方便并且易于使用。适用于任何和每一个 Core Data 项目。
完全使用 Swift 编写,并基于 ObjectiveRecord 进行深入研究。
创建、保存、删除和查询都非常简单。
[String:AnyObject]
字典进行创建、查询或排序String
进行查询和排序,例如 name == 'someName'
或 date ASC
NSPredicate
和 NSSortDescriptor
/[NSSortDescriptor]
进行查询和排序现在支持为您的 NSManagedObject
子类设置自动递增 ID
此库还能为您读取 json 字典。包括自动的 camelCase 转换,例如从服务器到本地的 first_name
到 firstName
。您还可以自定义字典映射。更多详细信息请参见 映射部分。
对象关系也由字典生成,但默认是禁用的。将 SwiftRecord.generateRelationships
设置为 true 以启用此功能。请参阅 关系部分。
访问 ark 了解更多有关 SwiftRecord 的入门友好引导
将Classes/SwiftRecord.swift
或SwiftRecord.framework
拖放到您的项目中
在每个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
}
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
,除非您的类找不到
*instancetype
、Self
在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'")
如果您创建了自定义的,请随意设置它
var myContext: NSManagedObjectContext = ...
SwiftRecord.sharedRecord.managedObjectContext = myContext
如果您设置了自定义上下文,请勿设置这些。如果您有与您的应用程序名称不同的modelName,则设置它。如果您想要不同的数据库名称,则设置它。
SwiftRecord.sharedRecord.modelName = "MyModelName"
SwiftRecord.sharedRecord.databaseName = "custom_database_name"
大多数情况下,您的JSON Web服务返回的键类似first_name
、last_name
等。
您的Swift实现具有camelCased属性 - firstName
、lastName
。
我们会自动检查与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()
SwiftRecord可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。
了解我们更多内容,请访问ark