SwiftyModel 0.1.0

SwiftyModel 0.1.0

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

Suyeol Jeon 维护。



  • devxoul

SwiftyModel

Swift 的模型框架。

特性

概览

假设我们使用 GitHub Issues API。它看起来是这样的

@objc enum GHState: Int, StringEnum {
    case Open
    case Closed

    var rawValues: [Int: String] {
        return [
            GHState.Open.rawValue: "open",
            GHState.Closed.rawValue: "closed",
        ]
    }
}

class GHIssue: SwiftyModel {
    var id: Int!
    var URL: NSURL!
    var HTMLURL: NSURL!
    var number: Int!
    var state: GHState = .Closed // enum must have a default value
    var title: String!
    var body: String!
    var user: GHUser!
    var labels: [GHLabel]?
    var milestoneTitle: String?

    override class func keyPathForKeys() -> [String: String]? {
        return [
            "URL": "url",
            "HTMLURL": "html_url",
            "milestoneTitle": "milestone.title",
        ]
    }

    override class func dateFormatterForKey(key: String) -> NSDateFormatter? {
        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
        return dateFormatter
    }
}

安装

iOS 8+

使用 CocoaPods。必需的 CocoaPods 版本至少为 0.36,它支持 Swift 框架。

Podfile

pod 'SwiftyModel'

iOS 7

建议您尝试 CocoaSeeds,它使用源代码而不是动态框架。

Seedfile

github 'SwiftyModel/SwiftyModel', '0.1.0', :files => 'SwiftyModel/SwiftyModel.swift'

JSON 映射

从 JSON 字典初始化单个对象

let issue = GHIssue(JSONDictionary)

从 JSON 数组初始化对象

let issues = GHIssue.fromArray(JSONArray) as! [GHIssue]

从 JSON 路径属性

{
    "id": 123,
    "author": {
        "id": 456,
        "name": "Suyeol Jeon",
        "nickname": "devxoul"
    }
}
class Post: SwiftyModel {
    var id: Int!
    var authorID: Int! // will be `456`
    var authorNickname: String? // will be `devxoul`

    override class func keyPathForKeys() -> [String: String]? {
        return [
            "authorID": "author.id",
            "authorNickname": "author.nickname",
        ]
    }

对象序列化

    let post = Post(JSONDictionary)
    post.toDictionary() // will return JSON dictionary

可选

SwiftyModel 完全支持可选。不再需要 NSNumber,也不再需要初始化属性。

class HealthData: SwiftyModel {
    var birthyear: Int?
    var weight: Float?
}

let health = HelathData(...)
if let weight = health.weight {
    ...
}

注意: 如果您使用原始类型的可选,SwiftyModel 与 Objective-C 不兼容。(例如 Int?Float!Bool?)因为这些没有被转换为 Objective-C。

枚举

SwiftyModel 支持 Swift 有限制的枚举。有两种类型的枚举:SuperEnumStringEnumSuperEnum 描述的是整型枚举,而 StringEnum 描述的是字符串枚举。

  • 枚举应该使用 @objc 属性声明。
  • SuperEnum 的原始类型必须是 Int,实现 StringEnum 协议。
  • StringEnum 必须实现 rawValues() 函数。

SuperEnum 的示例

@objc enum Direction: Int, SuperEnum {
    case Up
    case Down
    case Left
    case Right
}

StringEnum 的示例

@objc enum GHState: Int, StringEnum {
    case Open
    case Closed

    var rawValues: [Int: String] {
        return [
            GHState.Open.rawValue: "open",
            GHState.Closed.rawValue: "closed",
        ]
    }
}

关系

您可以为模型定义关系。

class Post: SwiftyModel {
    var author: User!
    var comments: [Comment]?
}

许可

SwiftyModel采用MIT许可。更多信息请参阅LICENSE文件。