Инициализатор TupleView в SwiftUI и iOS 13.3 перестает работать. что с этим происходит?
У меня есть такие объекты с ViewBuilders с TupleView
// 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 с таким инициализатором:
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")
}
)
}
1 ответ
Когда вы используете MenuView, вы должны добавить TupleView
?
MenuView {
TupleView((
DashboardView()
.withTag(0)
.tabBarItem {
TabItemView(imageName: "Dashboard", title: "Home")
},
ContactsView(companyId: self.getCompanyId())
.withTag(1)
.tabBarItem {
TabItemView(imageName: "Contacts", title: "Contacts")
}))
}