Swift Package Manager Platforms: macOS, iOS, tvOS, watchOS, Linux

ArrayBuilder

一个结果构建器,允许使用类似 SwiftUI 的语法,通过条件和循环声明式地构建数组。

灵感来自 https://gist.github.com/rjchatfield/72629b22fa915f72bfddd96a96c541eb

用法

通常使用条件创建数组的方法

    var textItems: [String] = []
    textItems.append("Lorem")
    if false {
        textItems.append("Amen")
    }
    if true {
        textItems.append("Ipsum")
    }
    textItems.append("Dolor")

使用 ArrayBuilder 通过条件创建数组

    let textItems: [String] = .init {
        "Lorem"
        if false {
            "Amen"
        }
        if true {
            "Ipsum"
        }
        "Dolor"
    }

也支持 switch case 和 for 循环

    let textItems: [String] = .init {
        "Lorem"
        
        switch number {
        case 5:
            "Ipsum"
        default:
            Void()
        }
        
        for number in 0...2 {
            "\(number)"
        }
        
        "Dolor"
    }

在返回数组的函数中使用

    @ArrayBuilder<String> func textItems() -> [String] {        
        "Lorem"
        if true {
            "Ipsum"
        }
        "Dolor"
    }
    let array = textItems()

在将数组作为参数的函数中使用

    func numberOfItems(@ArrayBuilder<String> _ array: () -> [String]) -> Int {
        return array().count
    }
    let count = numberOfItems {
        "Lorem"
        if false {
            "Amen"
        }
        if true {
            "Ipsum"
        }
        "Dolor"
    }
    // count == 3

Swift Package Manager

这个库是一个 Swift 包,可以使用以下 URL 添加

https://github.com/WilhelmOks/ArrayBuilder.git

导入模块以在您的代码中使用 ArrayBuilder

import ArrayBuilderModule

要在整个项目中使用 ArrayBuilder 而无需在每个文件中导入,您可以创建一个类型别名

typealias ArrayBuilder = ArrayBuilderModule.ArrayBuilder