我对带有 TupleView 的 ViewBuilders 有这样的初始化
// MARK: TupleView support
public init<A: View, B: View>(@ViewBuilder content: () -> TupleView<(A, B)>) {
let views = content().value
self.childs = [AnyView(views.0), AnyView(views.1)]
}
代码运行良好,但从新的 Xcode 11.3 更新 (iOS 13.3) 开始,此代码停止工作,并且未执行带有 TupleView 的构造函数。
这是我如何将 MenuView 与此类初始化程序一起使用:
菜单视图 {
DashboardView()
.withTag(0)
.tabBarItem {
TabItemView(imageName: "Dashboard", title: "Home")
},
ContactsView(companyId: self.getCompanyId())
.withTag(1)
.tabBarItem {
TabItemView(imageName: "Contacts", title: "Contacts")
}
}
但是现在它不起作用这个@ViewBuilder 并且我不认为正确调用 ViewBuilder.buildBlock() 并且这个参数被识别为调用
public init<Content: View>(@ViewBuilder content: () -> Content>) { }
我找到了解决方法,但它是非常丑陋的代码,而且我们如何使用原生 TabView 还很遥远。
MenuView {
ViewBuilder.buildBlock(
DashboardView()
.withTag(0)
.tabBarItem {
TabItemView(imageName: "Dashboard", title: "Home")
},
ContactsView(companyId: self.getCompanyId())
.withTag(1)
.tabBarItem {
TabItemView(imageName: "Contacts", title: "Contacts")
}
)
}