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 循环中设置切换状态

SwiftUI:如何根据 Picker 的值更新 ForEach 循环的范围

在 SwiftUI 中,如何在 LinkedList 中“Foreach”节点?