不能转换'String'类型'类别'



这是我的第一个iOS应用开发项目。我还在学习,一切对我来说都是新的。我在这里尝试创建三个导航矩形它们从数组导航到视图。但是有各种各样的错误。下面是代码

// ContentView.swiftui
 struct ContentView: View {
    
    struct Category : Identifiable{
        let id = UUID()
        let title: String
    }
    var categories = [
        Category( title: "Menu 1"),
        Category( title: "Menu 2"),
        Category( title: "Menu 3"),
    ]
    var body: some View {
        NavigationView {
            ScrollView(.horizontal) {
                HStack {
                        ForEach(categories, id:.title){category in
                            NavigationLink(destination: CategoryView(categories: category.title))
// Here comes the error (Cannot convert value of type 'String' to expected argument type 'Category')
                                {
                                ZStack{
                                    RoundedRectangle(cornerRadius: 20)
                                        .frame(width: 250, height: 120)
                                        .foregroundColor(.accentColor)
                                    .shadow(color: .black.opacity(0.2), radius: 10, x: 10, y: 10)
                                    .shadow(color: .white.opacity(0.7), radius: 10, x: -10, y: -10)
                                    Text(category.title)
                                }.padding(5)
                            }
                    }
                }
                .padding(10)
            }
        }
        .navigationBarTitleDisplayMode(.inline)
    }
}

下一个View文件如下,它也是一个简单的View。

// CategoryView.swift
struct CategoryView: View {
    var categories : Category
    var body: some View {
        NavigationView {
            List{
                ForEach(questions){question in
                
                Text("Question (question.id)")
                
                }
        }
.navigationBarTitle("Welcome") // Also this title is not visible, I've tried changing color.
            .navigationTitle(categories.title)
    }
}
}
struct CategoryView_Previews: PreviewProvider {
    
    static var previews: some View {
        CategoryView(categories: categories[1])
    }
}

Thanks in advance

您正在向CategoryView(categories: category.title)的初始化器传递一个字符串。去掉最后的.title,通过CategoryView(categories: category)

至于导航标题,修饰符需要进入NavigationView内部,而不是附加到NavigationView本身。这是因为你可以用不同的导航栏标题将多个视图推送到一个NavigationView上。

NavigationView {
    List {
        ForEach(questions) { question in
            Text("Question (question.id)")
        }
    } // end List
    .navigationBarTitle("Welcome")
} // end NavView

最新更新