Swift 如何迭代枚举以创建自定义选择器?
我正在尝试在LazyHGrid视图中使用方形瓷砖创建自定义选择器。希望能够使用我为先前使用的选择器创建的枚举。也就是说,我无法让它正确显示,因为它一直告诉我我的ForEach不符合RandomAccessCollection。我已经尝试在这里和谷歌搜索中尽我应有的努力Swift 如何迭代枚举以创建自定义选择器?,swift,swiftui,Swift,Swiftui,我正在尝试在LazyHGrid视图中使用方形瓷砖创建自定义选择器。希望能够使用我为先前使用的选择器创建的枚举。也就是说,我无法让它正确显示,因为它一直告诉我我的ForEach不符合RandomAccessCollection。我已经尝试在这里和谷歌搜索中尽我应有的努力 让activityLevel:activityLevel选择器 枚举ActivityLevel选择器:双精度,可大小写{ 例静坐=1.2 外壳lightlyActive=1.375 案例中度活跃=1.55 案例有效=1.725
让activityLevel:activityLevel选择器
枚举ActivityLevel选择器:双精度,可大小写{
例静坐=1.2
外壳lightlyActive=1.375
案例中度活跃=1.55
案例有效=1.725
变量说明:字符串{
切换自身{
例:久坐:
返回“久坐”
案例。lightlyActive:
返回“轻度激活”
案例。中度活跃:
返回“适度活跃”
案例。非常活跃:
返回“非常活跃”
}
}
}
var body:一些观点{
导航视图{
VStack{
文本(“请选择您的活动级别”)
.font(.caption)
LazyHGrid(行:[GridItem(.fixed(2))],内容:{
ForEach(activityLevel.description,id:\.self){levelSelection in//Error Here!请参见下面!
打印(级别选择)
}
})
}
}
}
}
错误显示在上面标识的行上
Generic struct 'ForEach' requires that 'String' conform to 'RandomAccessCollection'
您正试图在单个
ActivityVelSelector
项上使用ForEach
。要使ForEach
工作,它需要是项的集合(例如,一个数组)。这可能更符合您的要求:
struct ContentView: View {
let activityLevels: [ActivityLevelSelector] = ActivityLevelSelector.allCases
var body: some View {
NavigationView {
VStack {
Text("Please select your activity level.")
.font(.caption)
LazyHGrid(rows: [GridItem(.fixed(2))]) {
ForEach(activityLevels, id: \.self) { levelSelection in
Text(levelSelection.description)
}
}
}
}
}
}
如果.allCases
确实是您想要的,那么您可以进一步简化,去掉let activityLevels
并执行以下操作:
ForEach(ActivityLevelSelector.allCases, id: \.self) { levelSelection in
还要注意的是,您不能在
ForEach
中只打印
——您需要返回某种类型的视图。啊!这是有道理的。我曾经尝试过类似的事情,只是简单地尝试去做。所有的案例都在上面,但是没有正确地迭代它们。非常感谢。伟大的因为您只需要.allCases
,所以我添加了一行关于如何进一步简化的内容。感谢您将答案标记为已接受。如果您发现它有用,还可以使用箭头向上投票。