在 SwiftUI 中实现多个标题

Posted

技术标签:

【中文标题】在 SwiftUI 中实现多个标题【英文标题】:Implementing multiple headers in SwiftUI 【发布时间】:2021-02-08 16:42:13 【问题描述】:

希望每个人都做得很好 我想就swiftui中的标题寻求一些帮助 我制作了一个应用程序并添加了类别,因此我需要标题来分隔我的数据 但是,它没有做我想做的事! (典型的... :joy:)

善良的灵魂会帮助迷失的灵魂找到启蒙之路吗?

    import SwiftUI

struct ContentView: View 
    // MARK: - PROPERTIES
    
    @State private var isShowingSettings: Bool = false
    
    var fruit: [Fruit] = fruitData
    var driedFruit: [DriedFruit] = driedFruitData
    
    // MARK: - BODY
    
    var body: some View 
        NavigationView 
            List 
                Section(header: fruitHeader) 
                    ForEach(fruit, id: \.self)  item in
                        NavigationLink(destination: FruitDetailView(fruit: item)) 
                            FruitRowView(fruit: item)
                                .padding(.vertical, 4)
                        
                    
                
                Section(header: driedFruitHeader) 
                    ForEach(fruit, id: \.self)  item in
                        NavigationLink(destination: FruitDetailView(driedFruit: item)) 
                            FruitRowView(driedFruit: item)
                                .padding(.vertical, 4)
                        
                    
                
            
            
            .navigationTitle("Category")
            .navigationBarItems(trailing:
                                    Button(action: 
                                        isShowingSettings = true
                                    ) 
                                        Image(systemName: "slider.horizontal.3")
                                     //: BUTTON
                                    .sheet(isPresented: $isShowingSettings, content: 
                                        SettingsView()
                                    )
            )
         //: NAVIGATION
        .navigationViewStyle(StackNavigationViewStyle())
    
​
    var fruitHeader: some View 
        Text("Fruits").padding(.leading, -10)
    
​
    var driedFruitHeader: some View 
        Text("Dried fruits").padding(.leading, -10)
    

// MARK: - PREVIEW
struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView(fruit: fruitData, driedFruit: driedFruitData)
    

【问题讨论】:

您能描述一下您希望看到的情况与您正在经历的情况吗? 我创建了 2 个数据文件(FruitData 和 DriedFruitData)。为了使它们不同,我想创建标题。 FruitData 通过但不通过 DryFruitData。它给了我这个错误“编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”,然后在 var fruitHeader 和 var dryFruitHeader 处出现这两个错误“预期'('在函数声明的参数列表中 - 函数声明主体中应为“” - 实例方法声明中应为“func”关键字插入“func”” @Doodi 只需删除这两个 var 并删除多余的空间,然后再添加它会修复 【参考方案1】:

你需要在 ForEach 中传递 dryFruit 数组

List 
    Section(header: fruitHeader) 
        ForEach(fruit, id: \.self)  item in
            NavigationLink(destination: FruitDetailView(fruit: item)) 
                FruitRowView(fruit: item)
                    .padding(.vertical, 4)
            
        
    
    Section(header: driedFruitHeader) 
        ForEach(driedFruit, id: \.self)  item in //<--Here
            NavigationLink(destination: FruitDetailView(driedFruit: item)) 
                FruitRowView(driedFruit: item)
                    .padding(.vertical, 4)
            
        
    

【讨论】:

它没有工作:(我仍然有同样的错误 @Doodi 打破了您需要分隔代码的错误,对于参数中的预期 '(' 您只需要删除两个 var 并尝试重写代码。

以上是关于在 SwiftUI 中实现多个标题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的视图控制器中实现数据绑定?

SwiftUI:如何在 macOS 应用程序中实现编辑菜单

如何在 SwiftUI 中实现 MVVM 模式?视图不会重新渲染

SwiftUI:在 CarouselView 中实现定时器

如何在 swiftui 中实现 struct View 上的 var 类 ObservableObject

在 SwiftUI App 中实现暗模式切换