DependencyInjectorObjectMapper 1.0.6

DependencyInjectorObjectMapper 1.0.6

测试已测试
语言语言 SwiftSwift
许可证 BSD-3-Clause
发布最后发布2019年5月
SPM支持 SPM

Benoit BRIATTE 管理。



 
依赖
DependencyInjector~> 2.2
ObjectMapper~> 3.4
 

  • Digipolitan

DependencyInjector+ObjectMapper

Swift Version Build Status CocoaPods Compatible Carthage Compatible Swift Package Manager Compatible Platform Twitter

与 ObjectMapper 兼容的 Swift 依赖注入库

安装

CocoaPods

要使用 CocoaPods 安装 DependencyInjector+ObjectMapper,请将以下行添加到您的 Podfile 中。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

pod 'DependencyInjectorObjectMapper'

Carthage

Carthage 是一个集中式依赖管理器,它构建您的依赖并提供二进制框架。

您可以使用以下命令通过 Homebrew 安装 Carthage

$ brew update
$ brew install carthage

要使用 Carthage 将 DependencyInjector+ObjectMapper 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github 'Digipolitan/dependency-injector-object-mapper' ~> 1.0

运行 carthage update 以构建框架,并将构建的 DependencyInjectorObjectMapper.framework 拖入您的 Xcode 项目。

Swift 包管理器

Swift 包管理器是一个用于自动化分发 Swift 代码的工具,它集成在 swift 编译器中。

一旦设置了您的 Swift 包,将 DependencyInjector+ObjectMapper 作为依赖项添加,就像将其添加到您的 Package.swift 中的 dependencies 值一样简单。

dependencies: [
    .package(url: "https://github.com/Digipolitan/dependency-injector-object-mapper.git", from: "1.0.0")
]

如何使用?

首先,您必须创建符合 BaseMappable 协议的模型

public protocol User: BaseMappable {
    var id: String { get set }
    var created: Date? { get set }
    var address: Address { get set }
}

public protocol Address: BaseMappable {
    var street: String { get set }
    var zipCode: String { get set }
    var country: String { get set }
}

之后,为每个模型创建真实实现,符合 Mappable 协议

class UserModel: User, Mappable {
    public var id: String
    public var created: Date?
    public var address: Address

    public init(id: String, address: Address) {
        self.id = id
        self.address = address
    }

    public convenience required init?(map: Map) {
        guard
            let id: String = try? map.value("id"),
            let address: Address = try? map.injectedValue("address", type: Address.self) else {
                return nil
        }
        self.init(id: id, address: address)
    }

    public func mapping(map: Map) {
        self.id >>> map["id"]
        self.created <- (map["createdAt"], DateTransform())
        self.address >>> map.inject("address", type: Address.self)
    }
}

class AddressModel: Address, Mappable {
    public var street: String
    public var zipCode: String
    public var country: String

    public init(street: String, zipCode: String, country: String) {
        self.street = street
        self.zipCode = zipCode
        self.country = country
    }

    public convenience required init?(map: Map) {
        guard let street: String = try? map.value("street"), let zipCode: String = try? map.value("zipCode"), let country: String = try? map.value("country") else {
            return nil
        }
        self.init(street: street, zipCode: zipCode, country: country)
    }

    public func mapping(map: Map) {
        self.street >>> map["street"]
        self.zipCode >>> map["zipCode"]
        self.country >>> map["country"]
    }
}
  • 对于非 null 属性,在初始化器内设置值

  • 要在初始化过程中注入自定义实现,请在 map.injectedValue 中使用,或在映射函数中使用 map.inject

之后,您必须在模块中注册实现并推动模块到注入器中

class DefaultModule: Module {

    override init() {
        super.init()
        self.bind(User.self).to(UserModel.self)
        self.bind(Address.self).to(AddressModel.self)
    }
}
Injector.default.register(module: DefaultModule(), with: "default")

最后,按以下方式注入 User 模型

let user = try? Injector.default.inject(User.self, arguments: [
    "id": "1",
    "address": [
        "street": "abc",
        "zipCode": "75116",
        "country": "France"
    ]
])

贡献

请参阅 CONTRIBUTING.md 了解更多详情。

本项目遵守 贡献者公约行为准则。您参与其中,应遵守此准则。请举报不适当的行为到 [email protected]

许可证

DependencyInjector+ObjectMapper 依据 BSD 3-Clause 许可证 发布。