Swiftizy 1.3.9

Swiftizy 1.3.9

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2016年9月
SPM支持 SPM

Julien 维护。



Swiftizy 1.3.9

  • Julien Henrard

Swiftizy

Swiftizy 是什么

Swiftizy 对于使用 CoreData 开发 Swift 应用程序以及消费 REST 服务是一项极大的帮助。

CoreData

许多方便的方法用于获取、创建、删除、提示以及一个主键系统。

REST

轻松实现 GET、POST 和 DELETE

JSON

只需要一行代码将您的 JSON 转换为 NSManagedObject 子类。不需要为每个属性定义键。

使用 Swiftizy 的典型应用程序类型

  1. 您使用 CoreData 和 NSManagedObject 子类

  2. 您消费 REST 服务,发送 JSON 或者在您的服务器上 POST 一些 JSON 对象

  3. 您希望建立在您的 CoreData Context 上的 JSON 对象进行控制

  4. 您需要翻译您的应用程序。

未来特性

在下一个版本(1.3)中将添加:

现有特性的改进

  • 您将为您的 NSManagedObject 中每个关系的 JSON 解析器选择一个模式:CreateElseReturn 或 CreateElseUpdate

新特性

  • CoreData 迁移管理器

安装

Swiftizy可通过CocoaPods获取。要安装它,只需将以下行添加到您的 Podfile 中

pod "Swiftizy"

配置

导入

import Swiftizy

CoreDataManager

要使用 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")

您只需要为您应用程序中想要的语言编写相应的翻译文件。

示例:en.txt(英文)

labelSignIn=登录

buttonConnection=连接

示例:fr.txt(法语)

labelSignIn=Connexion

buttonConnection=CONNEXION

PlistReader

PlistReader是一个用于读取属性列表的简单类。您需要用您想读取的文件初始化PlistReader,并执行getField方法以获取您的值

目前仅适用于String字段,用于保存一些信息,如webservice url或其他信息。

示例:properties.plist

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” alt tag

当您启动应用程序时,您有5步。按照顺序执行它们:

  1. 使用createElseReturn方法从OpenLibrary API获取书籍:如果CoreData中没有对象,则在CoreData中创建对象,否则返回对象。

  2. 验证一切是否正常

  3. 在表格视图中查看您的数据:触摸一行以获取更多信息

  4. 更改每本书的一个属性(所有number_of_pages将为10)

  5. 使用createElseUpdate方法从步骤1获取相同的书籍,但在CoreData中创建对象或在Json中更新对象的值。

一些信息将在日志中显示

CoreDataManager

当配置完成并且您的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/ObjectParser进行HTTP请求

GET

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()
    }
})
POST

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文件。