Ios 在菜单()中使用多个if条件

Ios 在菜单()中使用多个if条件,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试在SwiftUI中构建一个菜单(),它至少应该有两个if条件 一旦我实现了第二个if条件,代码就不再编译了 这是一个SwiftUI错误,还是有人知道我做错了什么 struct ContentView: View { var departmentList = ["Department 1", "Department 2", "Department 3", "Department 4", "Depr

我正在尝试在SwiftUI中构建一个
菜单()
,它至少应该有两个if条件

一旦我实现了第二个if条件,代码就不再编译了

这是一个SwiftUI错误,还是有人知道我做错了什么

struct ContentView: View {

var departmentList = ["Department 1", "Department 2", "Department 3", "Department 4", "Deprtment 5"]
var salesDepartmentList = ["SalesDepartment 1", "SalesDepartment 2", "SalesDepartment 3"]
var itDepartmentList = ["ITDepartment 1", "ITDepartment 2", "ITDepartment 3"]

var body: some View {
    
    if #available(iOS 14.0, *) {
        VStack {
            Menu("Menu") {
                Menu("Departments") {
                    ForEach(departmentList, id: \.self) { department in
                        if department == "Department 1" {
                            Menu(department) {
                                ForEach(salesDepartmentList, id: \.self) { salesDepartment in
                                    Button(salesDepartment, action: {
                                        print("Do sales stuff")
                                    })
                                }
                            }
                        }
//                            else if department == "Department 2" {
                                Menu(department) {
                                    ForEach(itDepartmentList, id: \.self) { itDepartment in
                                        Button(itDepartment, action: {
                                            print("Do IT stuff")
                                        })
                                    }
                                }
//                            }
                    }
                }
            }
        }
    }
  }
}

对于编译器来说,这就变得复杂了。解决方案是通过分离来简化(总是有用的)

以下是可能的方法。使用Xcode 12.1/iOS 14.1进行测试(您可以进一步简化)

struct ContentView: View {
    
    var departmentList = ["Department 1", "Department 2", "Department 3", "Department 4", "Deprtment 5"]
    var salesDepartmentList = ["SalesDepartment 1", "SalesDepartment 2", "SalesDepartment 3"]
    var itDepartmentList = ["ITDepartment 1", "ITDepartment 2", "ITDepartment 3"]
    
    var body: some View {
        
        if #available(iOS 14.0, *) {
            VStack {
                Menu("Menu") {
                    Menu("Departments") {
                        ForEach(departmentList, id: \.self) { department in
                            if department == "Department 1" {
                                salesSubmenu(for: department)
                            }
                            else if department == "Department 2" {
                                itSubmenu(for: department)
                            }
                        }
                    }
                }
            }
        }
    }
    
    func salesSubmenu(for department: String) -> some View {
        Menu(department) {
            ForEach(salesDepartmentList, id: \.self) { salesDepartment in
                Button(salesDepartment, action: {
                    print("Do sales stuff")
                })
            }
        }
    }

    func itSubmenu(for department: String) -> some View {
        Menu(department) {
            ForEach(itDepartmentList, id: \.self) { itDepartment in
                Button(itDepartment, action: {
                    print("Do IT stuff")
                })
            }
        }
    }
}