FeatureFlagsController 是一个微型库,它利用 Combine 的函数式响应式编程能力,自动从项目中所有注册的特性标志构建 SwiftUI 表单视图。
将以下内容添加到您的 Podfile
pod "FeatureFlagsController"
使用 Xcode 12 SPM 集成:https://github.com/DataDog/FeatureFlagsController
所有注册的特性标志都出现在 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 中,这甚至更简单。 您可以使用 @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 许可证下提供的。