在 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 中实现 MVVM 模式?视图不会重新渲染