FeatureFlagsController

pod

FeatureFlagsController 是一个微型库,它利用 Combine 的函数式响应式编程能力,自动从项目中所有注册的特性标志构建 SwiftUI 表单视图。

需求

安装

CocoaPods

将以下内容添加到您的 Podfile

pod "FeatureFlagsController"

Swift Package Manager

使用 Xcode 12 SPM 集成:https://github.com/DataDog/FeatureFlagsController

用法

FeatureFlagsView

所有注册的特性标志都出现在 FeatureFlagsView 中,它是一个由 NavigationView 和分段的 Form 组成的 SwiftUI.View。 您可以将此视图显示在应用程序中的任何位置。 例如,在隐藏的“调试”菜单中。

此表单跟踪已注册的特性标志,并显示正确的 UI 以在运行时修改它们。 ToggleFeatureFlag 将显示一个简单的 Toggle (UISwitch),而 PickerFeatureFlag 将显示一个分段控件或一个子菜单,具体取决于给定的选择器样式。

声明

以下是如何声明新的特性标志

let roundedCornersFeatureFlag = ToggleFeatureFlag(
    title: "Rounded Corners", defaultValue: true, group: "Home Screen"
)

声明特性标志本身没有任何作用,但您仍然可以使用 value 属性访问其值。 一些特性标志类型具有 value 属性的别名,以使调用点更清晰。 例如,ToggleFeatureFlag 具有 isEnabled 别名。

注册

为了在 FeatureFlagsView 中显示特性标志,必须注册特性标志。 register() 方法返回一个 Combine AnyPublisher<Value, Never>,它立即发出当前值,然后发出所有值更新。

一旦 Combine 订阅被取消(例如,当拥有的视图控制器被弹出或关闭时),该特性标志将从 FeatureFlagsView 中消失。

roundedCornersFeatureFlag
    .register() // Adds the feature flag to the `FeatureFlagsView` and returns an AnyPublisher<Bool, Never>
    .map { $0 ? 16 : 0 } // Use all Combine operators you want to
    .assign(to: \.cornerRadius, on: squareView.layer) 
    .store(in: &cancellables) // On cancellation, the feature flag is removed from the `FeatureFlagsView`

SwiftUI

在 SwiftUI 中,这甚至更简单。 您可以使用 @FeatureFlag 属性包装器,可以通过传递声明的特性标志,或者使用便捷的 init。

static let roundedCornersFeatureFlag = ToggleFeatureFlag(
    title: "Rounded Corners", defaultValue: true, group: "Home Screen"
)

@FeatureFlag(Self.roundedCornersFeatureFlag) var hasRoundedCorners

或者...

@FeatureFlag(title: "Rounded Corners", group: "Home Screen") 
var hasRoundedCorners = true

您还可以使用 projected value 来获取底层的特性标志

Text($hasRoundedCorners.title)

许可证

此框架是在 MIT 许可证下提供的。