Transformer 1.0.6

Transformer 1.0.6

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2018年1月
SwiftSwift 版本4.0
SPM支持 SPM

incetro 维护。



  • incetro





Transformer 是一个使用 Swift 编写的框架,让您轻松将数据库模型转换为普通对象。

功能

  • 将数据库模型映射到普通对象
  • 嵌套对象(独立,在数组或字典中)
  • 结构体支持

支持的框架

  • CoreData
  • Realm

用法

为了支持映射,一个类或结构体只需要实现 Mappable 协议,该协议包括以下功能

init(with resolver: Resolver) throws

CoreData

class CategoryPlainObject: Mappable {
    
    let id: Int64
    let name: String
    
    var positions: [PositionPlainObject] = [] // Array of objects
    
    required init(with resolver: Resolver) throws {
        
        self.id        = try resolver.value("id")
        self.name      = try resolver.value("name")
        self.positions = try resolver.value("positions")
    }
}

class PositionPlainObject: Mappable {
    
    let id: Int64
    let name: String
    let price: Double
    
    var category: CategoryPlainObject? = nil // Nested object
    
    required init(with resolver: Resolver) throws {
        
        self.id       = try  resolver.value("id")
        self.name     = try  resolver.value("name")
        self.price    = try  resolver.value("price")
        self.category = try? resolver.value("category")
    }
}

struct User: Mappable {
    
    let id: Int64
    let name: String
    
    init(with resolver: Resolver) throws {
        
        self.id   = try resolver.value("id")
        self.name = try resolver.value("name")
    }
}

示例 - 从 CoreData 对象映射

/// A simple protocol for a nice exmaple

protocol Storable: class {
    
    static var entityName: String { get }
}

extension Storable where Self: NSManagedObject {
    
    static var entityName: String {
        
        return NSStringFromClass(self).components(separatedBy: ".").last ?? ""
    }
    
    init(in context: NSManagedObjectContext) {
        
        guard let entity = NSEntityDescription.entity(forEntityName: Self.entityName, in: context) else {
            
            fatalError("Cannot create entity for entity name: \(self.entityName)")
        }
        
        self.init(entity: entity, insertInto: context)
    }
}

class CategoryModelObject: NSManagedObject, Storable {
    
    @NSManaged var id: Int64
    @NSManaged var name: String
    @NSManaged var positions: NSSet
}

class PositionModelObject: NSManagedObject, Storable {
    
    @NSManaged var id: Int64
    @NSManaged var name: String
    @NSManaged var price: Double
    @NSManaged var category: CategoryModelObject
}

let categoryModelObject = CategoryModelObject(in: context)
let positionModelObject = PositionModelObject(in: context)

/// Fill some data to categoryModelObject & positionModelObject

...

/// And mapping from CoreData objects

let transformer = Transformer(from: .coredata)

let categoryPlainObject: CategoryPlainObject = try transformer.transform(from: categoryModelObject)
let positionPlainObject: PositionPlainObject = try transformer.transform(from: positionModelObject)

要求

  • iOS 8.0+ / macOS 10.9+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 8.1, 8.2, 8.3, 和 9.0
  • Swift 3.0, 3.1, 3.2, 和 4.0

通讯

  • 如果您 发现了一个错误,请打开一个问题。
  • 如果您 有功能请求,请打开一个问题。
  • 如果您 想要贡献,提交一个 pull 请求。

安装

手动

如果您不喜欢使用任何依赖管理器,您可以手动将 Transformer 集成到您的项目中。

嵌入式框架

  • 打开 Terminal,cd 到您的顶级项目目录,并运行以下命令 "if" 您的项目尚未初始化为 git 仓库

    $ git init
  • 通过运行以下命令将 Transformer 添加为一个 git 子模块

    $ git submodule add https://github.com/incetro/Transformer.git
  • 打开新的 Transformer 目录,并将 Transformer.xcodeproj 拖放到您应用程序 Xcode 项目的 Project Navigator 中。

    它应该出现在您应用程序蓝色项目图标之下。它是在所有其他 Xcode 组之上还是之下并不重要。

  • 在 Project Navigator 中选择 Transformer.xcodeproj 并确认部署目标与您的应用程序目标的部署目标匹配。

  • 接下来,在 Project Navigator(蓝色项目图标)中选择您的应用程序项目以导航到目标配置窗口,并在侧边栏的 "Targets" 标题下选择应用程序目标。

  • 在那个窗口的选项卡栏中,打开 "General" 面板。

  • 在 "Embedded Binaries" 部分下方点击 + 按钮。

  • 您将看到两个不同的 Transformer.xcodeproj 目录,每个目录在 "Products" 目录中嵌套了两个不同版本的 Transformer.framework

    您选择哪个 "Products" 目录并不重要,但您选择的是上半部分的 Transformer.framework 还是下半部分确实很重要。

  • 对于 iOS 选择顶部的 Transformer.framework,对于 OS X 选择底部的。

    您可以通过检查您项目的构建日志来验证您选择了哪个。对于Transformer的构建目标是以下之一:Transformer iOSTransformer macOSTransformer tvOSTransformer watchOS

  • 就这样了!

    Transformer.framework会自动添加为目标依赖项、链接库和复制文件阶段的嵌入框架,这对于在模拟器和设备上构建是所有您需要的。

作者

incetro,[email protected]

许可证

Transformer遵循MIT许可协议。更多信息请参阅LICENSE文件。