问题是
Position
。如果我使用像 String
、Int
这样的原始参数,效果很好。
我不明白为什么编译器无法推断“内容”。
Section(items: items) { params in
Text(params.text)
}
来源
public struct Section<T, Content>: View where T: Identifiable & Equatable, Content: View {
public enum Position: String {
case first
public var text: String {
return "text in position"
}
}
var items: [T]
@ViewBuilder var content: (Position) -> Content
public var body: some View {
ForEach(items) { item in
content(.first)
}
}
}
因为
Position
枚举是在Section
内声明的。如果您注意到,当您尝试在这种情况下隐式推断 Text
时,编译器无法确定什么是 Content
。
Section(items: items) { params in
Text(params.text)
}
//param: Section<SomeData, _>.Position //<- `_` here
尝试将
Position
声明移到 Section
之外将解决此问题:
public enum Position: String, Identifiable {
public var id: Self {
self
}
case first
public var text: String {
return "text in position"
}
}
public struct Section<T, Content>: View where T: Identifiable & Equatable, Content: View {
...
}