我有代码,当用户点击产品(衬衫或裤子)时,使我的过滤条消失。这一切都发生在市场选项卡。
我认为一旦错误被修复,代码将会工作,但是我无法摆脱关于缺少参数的问题。
marketplace的代码是:
@Binding var shirtData : Shirt!
@Binding var showDetailShirt: Bool
@Binding var trouserData : Trouser!
@Binding var showDetailTrouser: Bool
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 10){
if !showDetailShirt && !showDetailTrouser {
marketplaceFilterBar
}
if selectedMarketplaceFilter == .shirt {
MarketplaceShirtView()
}
if selectedMarketplaceFilter == .trouser {
MarketplaceTrouserView()
}
}
}
下面是TabView
的代码@StateObject var appModel: AppViewModel = .init()
@StateObject var sharedData: SharedDataModel = SharedDataModel()
@Binding var shirtData : Shirt!
@Binding var showDetailShirt: Bool
@Binding var trouserData : Trouser!
@Binding var showDetailTrouser: Bool
// Animation Namespace...
@Namespace var animation
// Hiding Tab Bar...
init(){
UITabBar.appearance().isHidden = true
}
var body: some View {
VStack(spacing: 0){
// Tab View...
TabView(selection: $appModel.currentTab) {
Marketplace(animation: _animation)
.environmentObject(sharedData)
.tag(Tab.Market)
.setUpTab()
Home()
.environmentObject(sharedData)
.tag(Tab.Home)
.setUpTab()
}
在TabView的Marketplace行上,我得到错误:
调用参数'shirtData', 'showDetailShirt', 'trouserData', 'showDetailTrouser'缺少参数
更新:在我的MarketplaceShirtView中我有以下代码:
@StateObject var MarketplaceModel = MarketplaceViewModel()
@State private var selectedMarketplaceFilter: MarketplaceFilterViewModel = .shirt
@Namespace var animation : Namespace.ID
@State var showDetailShirt = false
@State var selectedShirt : Shirt!
// Shared Data...
@EnvironmentObject var sharedData: SharedDataModel
当我使用if语句来确定是否显示Detail视图时,我得到了错误:不能将类型'Binding<Shirt?> '的值转换为期望的参数类型'Binding'
代码如下:
if selectedShirt != nil && showDetailShirt{
ShirtDetailView(shirtData: $selectedShirt, showDetailShirt: $showDetailShirt,animation: _animation)
}
根据你发布的代码,MarcetPlace
应该这样初始化:
Marketplace(shirtData: $shirtData, showDetailShirt: $showDetailShirt, trouserData: $trouserData, showDetailTrouser: $showDetailTrouser)
编辑:
你有一个自定义的初始化器和没有默认值的属性所以你可能也需要初始化它们
。
init(shirtData: Binding<Shirt>, .....
编辑2:
更准确地说,在TabView中:
// Hiding Tab Bar...
init(shirtData: Binding<Shirt?>, showDetailShirt: Binding<Bool>, trouserData: Binding<Trouser?>, showDetailTrouser: Binding<Bool>){
self._shirtData = shirtData
self._showDetailShirt = showDetailShirt
self._trouserData = trouserData
self._showDetailTrouser = showDetailTrouser
UITabBar.appearance().isHidden = true
}
我认为你不需要那些隐式展开,所以用@Binding var shirtData : Shirt
代替@Binding var shirtData : Shirt!
,在初始化式中,init(shirtData: Binding<Shirt?>,
将变成init(shirtData: Binding<Shirt>,