无法将类型 'String' 的值转换为预期的参数类型 'Category'

Cannot convert value of type 'String' to expected argument type 'Category'

这是我的第一个 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])
    }
}

提前致谢

您正在将字符串传递给 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