FactoryProvider 0.5.2

FactoryProvider 0.5.2

Takeshi Ihara维护。



  • Takeshi Ihara

🏭FactoryProvider🏭

Build Status Version Platform GitHub license GitHub release Xcode Swift Swift Package Manager

生成Swift框架工厂的样板代码。

要求

  • Swift 4+
  • Xcode 9+

平台

FactoryProvider支持以下平台

  • iOS 8+
  • Mac OSX 10.9+
  • watchOS 2+
  • tvOS 9+

支持

  • 枚举
  • 结构体

FactoryProvider

1. 安装

CocoaPods

通过 CocoaPods 可以使用 FactoryProvider 开发运行时。要安装它,只需在 Podfile 中的测试目标中添加以下行:

pod "FactoryProvider"

并将以下 运行脚本 构建阶段添加到测试目标的 构建阶段

"${PODS_ROOT}/FactoryProvider/generate" --config .factory.yml

运行一次后,找到 Factories.generated.swift 并将其拖到 Xcode 测试目标组中。

.factory.yml

includes: # paths of file or directory to generate
  - Input/SubInput1
  - Input/SubInput2/Source.swift
excludes: # paths of file or directory not to generate
  - Input/SubInput1/SubSubInput
  - Input/SubInput2/Source.swift
testables: # testable targets
  - target1
  - target2
output: output/Factories.generated.swift # path of generated file

2. 使用方法

您可以通过调用 Factory<TypeName>.provide() 获取一个实例。每个属性都设置为默认值。

struct Climber {
    let name: String
    let age: Int
}

let climber = Factory<Climber>.provide()
// Climber(name: "", age: 0)

 let optClimber = Factory<Climber?>.provide()
// Optional(Climber(name: "", age: 0))

 let arrayClimber = Factory<[Climber]>.provide()
// [Climber(name: "", age: 0)]

3. 镜头

Factory<TypeName>.provide() 提供固定实例。您可以通过镜头修改每个属性。

获取

let name = Factory<Climber>.provide().name or Lens<Climber>.name().get(Factory<Climber>.provide())
// ""

设置

import FactoryProvider

let climber = Factory<Climber>.provide() |> Lens<Climber>.name() *~ "Climber"
// Climber(name: "Climber", age: 0)

修改

import FactoryProvider

let name = Factory<Climber>.provide() |> Lens<Climber>.name() *~ { "Climber" |> { $0 + $0 } }()
// Climber(name: "ClimberClimber", age: 0)

编写

import FactoryProvider

struct Climber {
    let id: Id
    let name: String
    
    struct Id {
        let value: String
    }
}

let climber1 = Factory<Climber>.provide()
// Climber(id: Id(value: ""), name: "")

let climber2 = climber1 |> Lens<Climber>.id() * Lens<Climber.Id>.value() *~ "id"
// Climber(id: Id(value: "id"), name: "")

通知

泛型

如果您希望使用泛型包含类型,应使用 0.4.1

pod "FactoryProvider", '~> 0.4.1'

许可协议

FactoryProvider 在 MIT 许可协议 下可用。