【发布时间】:2020-08-19 09:18:10
【问题描述】:
我有一个视图,它显示选项列表并为用户提供选择其中一个选项的选项。此视图必须可重用以与多组选项一起使用。我该怎么做。我尝试了下面的方法,但我收到了这个错误Protocol 'Options' can only be used as a generic constraint because it has Self or associated type requirements,我知道为什么会这样。有更好的方法吗?
protocol Options: CaseIterable {
var displayName: String { get }
}
enum MyOptions: Options {
case hello
case mello
case fello
static var allCases: [MyOptions] {
[.hello,.mello]
}
var displayName: String {
"hello"
}
}
/// This is just for testing
func testContains(option: Options, options: [Options]) -> Bool {
true
}
print(testContains(option: MyOptions.fello, options: MyOptions.allCases))
【问题讨论】:
-
OptionSet 适合你吗?
-
这些是不相关的选项集。不要认为 OptionSet 有意义
-
我认为泛型不会帮助你。查看您对
MyOptions的声明,它本质上是在重新创建OptionSet。另一种方法是在枚举中使用字符串原始值 -
例如:我会有不同类型的选项,例如 BaseOptions、ToppingOptions、PackagingOpitons,它们可以显示在同一个可重用视图中。选项集在这里如何帮助我
-
可能不会。就在我看到您的代码时,您实际上是在重新创建
OptionSet。您还没有准确显示您希望如何在视图中使用各种选项。你的协议需要的不仅仅是displayName
标签: swift swift-protocols