Structify 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Structify 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Structify 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Swift 查看源码 »
操作系统 OS X
软件类型 开源软件
开源组织
地区 不详
投 递 者 Alias_Travis
适用人群 未知
收录时间 2021-10-28

软件简介

Structify 旨在让你更轻松将 Swift 结构转换为 Objective-C 类,开发者无需手动将结构转换为类,反之亦然。

不使用 Structify

struct User {
    let address: String
    let company: String
    let email: String
    let name: String
    let phone: String
    let uid: String
    let username: String
    let website: String
    let birthday: Date
}

class RLMUser: Object {

    @objc dynamic var address: String = ""
    @objc dynamic var company: String = ""
    @objc dynamic var email: String = ""
    @objc dynamic var name: String = ""
    @objc dynamic var phone: String = ""
    @objc dynamic var uid: String = ""
    @objc dynamic var username: String = ""
    @objc dynamic var website: String = ""
    @objc dynamic var birthday: Date = Date()
    
    override class func primaryKey() -> String? {
        return "uid"
    }
}

extension RLMUser {
    func toStruct() -> User {
        return User(address: address,
                    company: company,
                    email: email,
                    name: name,
                    phone: phone,
                    uid: uid,
                    username: username,
                    website: website,
                    birthday: birthday)
    }
}

extension User {
    func toObject() -> RLMUser {
        return RLMUser.build { object in
            object.uid = uid
            object.address = address
            object.company = company
            object.email = email
            object.name = name
            object.phone = phone
            object.username = username
            object.website = website
            object.birthday = birthday
        }
    }
}

乍一看似乎很方便的方法。但是如果你的结构不是那么小并且有更多的属性呢?如果你有太多类似User这样的结构时怎么办?如果您想在开发过程中为现有结构添加更多属性怎么办?

使用 Structify

struct User {
    var address: String = ""
    var company: String = ""
    var email: String = ""
    var name: String = ""
    var phone: String = ""
    var uid: String = ""
    var username: String = ""
    var website: String = ""
    var birthday: Date = Date()
}

class RLMUser: Object {
    //you only set the primaryKey as usual 
    override class func primaryKey() -> String? {
        return "uid"
    }
}

extension RLMUser: StructConvertible {
    typealias StructType = User
}

extension User: ObjectConvertible {
    typealias ClassType = RLMUser
}
你唯一需要做的就是让你的结构符合ObjectConvertible协议并创建一个 Objective-C 对类并符合StructConvertible协议。

要求

  • iOS 8.0+
  • Xcode 10.+
  • Swift 4.2+

安装

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

pod 'Structify'

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部