Swiftizy 对于使用 CoreData 开发 Swift 应用程序以及消费 REST 服务是一项极大的帮助。
许多方便的方法用于获取、创建、删除、提示以及一个主键系统。
轻松实现 GET、POST 和 DELETE
只需要一行代码将您的 JSON 转换为 NSManagedObject 子类。不需要为每个属性定义键。
您使用 CoreData 和 NSManagedObject 子类
您消费 REST 服务,发送 JSON 或者在您的服务器上 POST 一些 JSON 对象
您希望建立在您的 CoreData Context 上的 JSON 对象进行控制
您需要翻译您的应用程序。
在下一个版本(1.3)中将添加:
Swiftizy可通过CocoaPods获取。要安装它,只需将以下行添加到您的 Podfile 中
pod "Swiftizy"
import Swiftizy
要使用 CoreDataManager,您首先需要创建自己的 CoreData 栈,在 AppDelegate 中声明它,并在下面的
lazy var coreDataStack = CoreDataStack()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
CoreDataManager.managedContext = coreDataStack.context
return true;
}
首先,您需要使用合适的语言初始化您的翻译系统。如果您允许在应用程序中手动更改语言,只需再次调用带有新值的“initialize”方法。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Translations.initialize(defaultLang: "en", currentLang: "fr")
return true;
}
然后,在某个控制器中,您可以轻松地翻译您的组件
labelSignIn.text = Translations.translate("label_sign_in")
您只需要为您应用程序中想要的语言编写相应的翻译文件。
labelSignIn=登录
buttonConnection=连接
labelSignIn=Connexion
buttonConnection=CONNEXION
PlistReader是一个用于读取属性列表的简单类。您需要用您想读取的文件初始化PlistReader,并执行getField方法以获取您的值
目前仅适用于String字段,用于保存一些信息,如webservice url或其他信息。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
plistReader(plistFileName: "properties")
// Get my rest URL
print("Your url: \(PlistReader.getField("url")!)")
return true;
}
您可以在桌面克隆该项目并打开它来获取示例工程。一旦打开,只需将您的项目替换为“Swiftizy_example”而不是“Swiftizy”
当您启动应用程序时,您有5步。按照顺序执行它们:
使用createElseReturn方法从OpenLibrary API获取书籍:如果CoreData中没有对象,则在CoreData中创建对象,否则返回对象。
验证一切是否正常
在表格视图中查看您的数据:触摸一行以获取更多信息
更改每本书的一个属性(所有number_of_pages将为10)
使用createElseUpdate方法从步骤1获取相同的书籍,但在CoreData中创建对象或在Json中更新对象的值。
一些信息将在日志中显示
当配置完成并且您的datamodel / 子类创建后,您可以使用CoreDataManager:这是一个静态类,为您提供大量的CoreData方法。
let newUser = CoreDataManager.Create.entity("User") as! User
newUser.firstname = "Jhon"
CoreDataManager.save()
您创建之前有一个验证,如果存在属性则不会重复相同的对象。如果存在,返回nil
CoreDataManager.Create.exceptIfStringMatch("User", attributeName: "firstname", attributeValue: "Jhon")
let users: [User] = CoreDataManager.Fetch.all("User") as! [User]
使用定义的谓词
let users: [User] = CoreDataManager.Fetch.equalString("User", attributeName: "firstname", attributeValue: "Jhon") as [User]
根据您的谓词(如果需要,以及描述符)获取数据
let predicate: NSPredicate = NSPredicate(format: "age = %d", 27)
let predicate2: NSPredicate = NSPredicate(format: "firstname = %@", "Jhon")
let predicates: NSCompoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, predicate2])
let users: [User] = CoreDataManager.Fetch.custom("User", descriptors: nil, predicate: predicates) as! [User]
CoreDataManager.Fetch.orderBy("User", orderBy: "firstname", ascending: true)
批量删除
CoreDataManager.Delete.batch("User")
删除一个
let user = CoreDataManager.Fetch.all("User")[0] as! User
CoreDataManager.Delete.one(user)
删除多个
let users = CoreDataManager.Fetch.all("User") as! [User]
CoreDataManager.Delete.many(users)
CoreDataManager.save()
CoreDataManager.reset()
CoreDataManager.discardChanges()
JsonParser为你提供了一个方法来消费一些JSON,直接创建managedObject,并在你的对象中正确放置信息。与所有JSON解析器一样,你只需要将你的实体属性的名称与json文件匹配即可。你可以将此与GET请求相关联来获取图书馆中的所有书籍。使用RestManager执行GET请求。你有不同的GET请求版本,选择你需要的版本。
let url = "http://mywebservice.com/rest/book/all"
RestManager.GET(url, withBehaviorResponseForArray: {(books, error) in
if error == nil {
for book in books {
// For return the object if already in CoreData (based on the primary key)
let myBook = JsonParser.jsonToManagedObject(object, createElseReturn: Book.self)
// For update the object with values in json if object is already in CoreData
let myBook = JsonParser.jsonToManagedObject(object, createElseUpdate: Book.self)
}
CoreDataManager.save()
}
})
Object Parser可以解析jsonString中的managedObject。你可以将其与POST方法结合使用。如果你想执行同步请求,可以使用POST方法或POST_SYNCRO。如果POST响应返回一些JSON,你将在字典中获得响应,就像GET请求一样。如果响应不是JSON,数据将转换为字符串,并通过“dataString”键可访问。Swiftizy有很多字符串扩展。在这里,POST响应包含布尔值,因此你可以使用.dataString中的.toBool()方法。
let url= "http://mywebservice.com/rest/book/post"
let aBook = CoreDataManager.fetchWithPredicateWithString("Book", attributeName: "title", attributeValue: "Harry Potter")[0] as! User
let jsonBook = ObjectParser.convertToJsonString(aBook)
RestManager.POST(url, jsonToPost: jsonBook, responseHandler: {(response, error) in
if error == nil {
if (response["dataString"] as! String).toBool() {
print("Success")
} else {
print("Post Failed, server return false)")
}
}
})
Julien Henrard, [email protected]
Swiftizy可在MIT许可证下获得。有关更多信息,请参阅LICENSE文件。