无法推断包装回调参数

问题描述 投票:0回答:1

问题是

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)
    }
  }

}
swift generics
1个回答
0
投票

因为

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 {
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.