Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何迭代枚举以创建自定义选择器?_Swift_Swiftui - Fatal编程技术网

Swift 如何迭代枚举以创建自定义选择器?

Swift 如何迭代枚举以创建自定义选择器?,swift,swiftui,Swift,Swiftui,我正在尝试在LazyHGrid视图中使用方形瓷砖创建自定义选择器。希望能够使用我为先前使用的选择器创建的枚举。也就是说,我无法让它正确显示,因为它一直告诉我我的ForEach不符合RandomAccessCollection。我已经尝试在这里和谷歌搜索中尽我应有的努力 让activityLevel:activityLevel选择器 枚举ActivityLevel选择器:双精度,可大小写{ 例静坐=1.2 外壳lightlyActive=1.375 案例中度活跃=1.55 案例有效=1.725

我正在尝试在LazyHGrid视图中使用方形瓷砖创建自定义选择器。希望能够使用我为先前使用的选择器创建的枚举。也就是说,我无法让它正确显示,因为它一直告诉我我的ForEach不符合RandomAccessCollection。我已经尝试在这里和谷歌搜索中尽我应有的努力


让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
,所以我添加了一行关于如何进一步简化的内容。感谢您将答案标记为已接受。如果您发现它有用,还可以使用箭头向上投票。