SwiftUI:如何在 ForEach 循环中不显示“case none”
Posted
技术标签:
【中文标题】SwiftUI:如何在 ForEach 循环中不显示“case none”【英文标题】:SwiftUI: How to not show "case none" in a ForEach loop 【发布时间】:2020-12-18 02:18:14 【问题描述】:目前,我有一个显示所有图标案例的 foreach 循环。我想隐藏 case none 因为我的 EffectIcon 视图需要一个选定的案例。 父视图:
enum Icons: String,CaseIterable, Hashable
case overlayText = "Text"
case image = "Image"
case rotate = "Rotate"
...
case none
struct EffectPanel: View
@State var currentIconSelected: Icons = .none
@State var listIcons = [Bool](repeating: false, count: Icons.allCases.count)
var body: some View
VStack
ScrollView(.horizontal, showsIndicators: false)
HStack(spacing: 10)
ForEach(0..<listIcons.count, id: \.self) i in
EffectIcon(icon: Icons(rawValue: Icons.allCases[i].rawValue)!, currentIconSelected: $currentIconSelected)
.background(Color.black)
【问题讨论】:
【参考方案1】:您可以尝试这样的方法来隐藏 .none 案例:
ForEach(0..<listIcons.count, id: \.self) i in
if Icons(rawValue: Icons.allCases[i].rawValue)! != .none
EffectIcon(icon: Icons(rawValue: Icons.allCases[i].rawValue)!,
currentIconSelected: $currentIconSelected)
【讨论】:
【参考方案2】:这是可能的替代方案(只是更简单)
ForEach(Icons.allCases, id: \.self) i in
if i != .none
EffectIcon(icon: Icons(rawValue: i.rawValue), currentIconSelected: $currentIconSelected)
【讨论】:
谢谢阿斯佩里!!这真的让我大开眼界,我将把它应用到我的所有代码中。另外,非常感谢您多次帮助我!【参考方案3】:您也可以将此static var
添加到您的enum
:
enum Icons
static var selectableCases: [Icons]
var selectableCases = allCases
selectableCases.removeLast()
return selectableCases
【讨论】:
以上是关于SwiftUI:如何在 ForEach 循环中不显示“case none”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 的 ForEach 循环中增加状态?
如何使用 SwiftUI 在 Xcode 中消除 foreach 循环的歧义
SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?
如何在 SwiftUI 的 foreach 循环中设置切换状态