Swiftui 如何定义接受任意数据元素并生成;“一些”;看法
我正在构建一个显示字符串集合的自定义视图,但希望对其进行扩展,以接受一个闭包,该闭包将以不同的方式呈现这些字符串中的每一个,可能不会作为Swiftui 如何定义接受任意数据元素并生成;“一些”;看法,swiftui,Swiftui,我正在构建一个显示字符串集合的自定义视图,但希望对其进行扩展,以接受一个闭包,该闭包将以不同的方式呈现这些字符串中的每一个,可能不会作为文本视图。例如,这是我的原始代码: struct MyCollectionView : View { var data : [String] var body : some View { ZStack { ForEach(0..<data.count, id: \.self) { string in Text(s
文本
视图。例如,这是我的原始代码:
struct MyCollectionView : View {
var data : [String]
var body : some View {
ZStack {
ForEach(0..<data.count, id: \.self) { string in
Text(string) // <- will try to invoke the closure here
}
}
}
}
struct MyCollectionView:视图{
变量数据:[字符串]
var body:一些观点{
ZStack{
ForEach(0..这里是一种可能的方法。适用于Xcode 11.2和iOS 13.2
struct MyCollectionView<Data, Cell>: View where Data: Hashable, Cell: View {
typealias CellRenderer = (Data) -> Cell
var data : [Data]
var cellRenderer : CellRenderer
init(_ data: [Data], @ViewBuilder cellRenderer: @escaping CellRenderer) {
self.data = data
self.cellRenderer = cellRenderer
}
var body : some View {
ZStack {
ForEach(data, id: \.self) { value in
self.cellRenderer(value)
}
}
}
}
struct MyCollectionView_Previews: PreviewProvider {
static var previews: some View {
MyCollectionView(["one", "two"]) { value in
Text(value)
}
}
}
struct MyCollectionView:视图,其中数据:可散列,单元格:视图{
typealias CellRenderer=(数据)->单元格
var数据:[数据]
var-cellRenderer:cellRenderer
init(data:[data],@ViewBuilder cellRenderer:@escaping cellRenderer){
self.data=数据
self.cellRenderer=cellRenderer
}
var body:一些观点{
ZStack{
ForEach(数据,id:\.self){中的值
self.cellRenderer(值)
}
}
}
}
结构MyCollectionView\u预览:预览提供程序{
静态var预览:一些视图{
MyCollectionView([“一”,“两”]){中的值
文本(值)
}
}
}
struct MyCollectionView<Data, Cell>: View where Data: Hashable, Cell: View {
typealias CellRenderer = (Data) -> Cell
var data : [Data]
var cellRenderer : CellRenderer
init(_ data: [Data], @ViewBuilder cellRenderer: @escaping CellRenderer) {
self.data = data
self.cellRenderer = cellRenderer
}
var body : some View {
ZStack {
ForEach(data, id: \.self) { value in
self.cellRenderer(value)
}
}
}
}
struct MyCollectionView_Previews: PreviewProvider {
static var previews: some View {
MyCollectionView(["one", "two"]) { value in
Text(value)
}
}
}