ios - iOS SwiftUI中ForEach内部的if语句

标签 ios if-statement foreach swiftui

我在iOS SwiftUI(Xcode版本11.6)的ForEach内部有一个“if”,它可以正常工作。

struct ContentView: View {
    var body: some View {
        List {
            ForEach(0 ..< 10) {(i: Int) in
                if i % 2 == 0 {
                    Text(String(i))
                }
            }
        }
    }
}
现在,我想做同样的事情,但是要使用字符串数组而不是Ints的半开范围。
struct ContentView: View {
    let states: [String] = [
        "Alabama",
        "Alaska",
        "Arizona",
        "Arkansas",
        "California"
    ];
    
    var body: some View {
        List {
            ForEach(states, id: \.self) {(state: String) in
                if state.hasPrefix("Al") {
                    Text(state)
                }
            }
        }
    }
}
我从此ForEach得到的错误消息是
Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
出了什么问题?我很困惑,因为Apple的SwiftUI教程在第3部分第1步的ForEach中有一个“if”
https://developer.apple.com/tutorials/swiftui/handling-user-input

先感谢您。

最佳答案

您可以尝试以下方法:

struct ContentView: View {
    ...
    
    var body: some View {
        List {
            ForEach(states, id: \.self) { state in
                self.stateView(state: state)
            }
        }
    }
    
    @ViewBuilder
    func stateView(state: String) -> some View {
        if state.hasPrefix("Al") {
            Text(state)
        }
    }
}
这样,您的代码也可能更具可读性。

关于ios - iOS SwiftUI中ForEach内部的if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63270850/

相关文章:

android - Android,if/else构造总是失败(编译器无法读取更改)

c++ - continue 语句真的会增加 C++ 中的循环速度吗?

javascript - 如何检查数组中是否存在值并且值的计数大于 1?

javascript - javascript this 又让我困惑了

css - 带 if 的 knockout.js 数据绑定(bind)循环

ios - 命令 PhaseScriptExecution 以非零退出代码 Xcode 11.3.1 失败

ios - UITableView 标题显示在表格后面

ios - 核心数据不会保存更改

objective-c - 如何搜索目录 ios

JavaScript if 语句忽略条件