Hi! I am trying to add some logic in ForEach to compute the views, but XCode does not allow that. Can you tell me why?
ForEach(0...10, id: \.self, content: {
i in
let s : Int = i
return Text("abc")
}
XCode will return error message for the above coce: Cannot convert value of type '(_) -> _' to expected argument type '(_.Element) -> _'
However, the code below will work:
ForEach(0...10, id: \.self, content: {
i in
return Text("abc")
}
I looked at the declaration of ForEach, but couldn't find why it doesn't accept the "let" statement.
init(_ data: Data, @ViewBuilder content: @escaping (Data.Element) -> Content)
I understand that if I put the logic in a separate structure view for each cell, I can get the code work, but just trying to get a better understanding on SwiftUI and posted this question.
Thank you!
This will work:
struct ContentView: View {
var body: some View {
List {
ForEach(0...200, id: \.self) { i -> Text in
let s : Int = i*i
return Text("Text \(s)")
}
}
}
}
Now, closure knows what to return (Text)
Without the let declaration, compiler can infer the type from a single line.
Of course, in this case you can even write simpler form without return. Everything is implicit
ForEach(0...200, id: \.self) { _ in
Text("abc")
}