Swiftui 为 Json 数据项创建加载更多按钮

Posted

技术标签:

【中文标题】Swiftui 为 Json 数据项创建加载更多按钮【英文标题】:Swiftui Creating a load more button for Json data items 【发布时间】:2021-06-30 14:50:06 【问题描述】:

我的声望还没有达到 50,所以我无法评论这个问题 SwiftUI Issue displaying specific number of Json Data Items 来询问它是如何完成的。这个想法是在加载视图时显示 json 数组中的前 10 个项目,然后加载更多按钮以显示更多项目。 这就是我的代码的样子。

Group 

    HStack 
        Text("Recommended Events")
           .font(.title3)
           .foregroundColor(.white)
           .fontWeight(.bold)
                                    
          Spacer()
                                    
           Button(action: 
            
           ) 
             Text("Show all")
               .font(.title3)
               .foregroundColor(Color.white)
               .fontWeight(.bold)
               
           
            .padding(15)

    ForEach(recommendeds)  recommended in
                                    NavigationLink(destination: RecommendedEventsDetailView(recommended: recommended)) 
                                    RecommendedEventsView(recommended: recommended)
                                    
                                


编辑

https://***.com/users/14733292/raja-kishan 响应后,我尝试了它并收到此错误无法生成表达式诊断;请提交错误报告这是我现在的代码阶段。

struct RecommendedModel: Identifiable 
    var id = UUID()
    var number: Int
    
    init(_ number: Int) 
        self.number = number
    



struct PlacesView: View  
private var arrData: [RecommendedModel] = (0...10).map(RecommendedModel($0))
        
        @State private var isMore: Bool = false
    
    
    //E-MARK: - Body
    var body: some View  
Group 

    HStack 
        Text("Recommended Events")
           .font(.title3)
           .foregroundColor(.white)
           .fontWeight(.bold)
                                    
          Spacer()
                                    
           Button(action: 
            withAnimation 
                                isMore.toggle()
                            
           ) 
             Text("Show all")
               .font(.title3)
               .foregroundColor(Color.white)
               .fontWeight(.bold)
               
           
            .padding(15)

    ForEach( (isMore ? arrData : recommendeds(arrData.prefix(5))))  recommended in
                                    NavigationLink(destination: RecommendedEventsDetailView(recommended: \(recommended.number)) 
                                    RecommendedEventsView(recommended: \(recommended.number))
                                    
                                




  

下面是我之前的数据模型,它加载了保存为RecommendedModel.swift的json数据

struct Recommended: Codable, Identifiable 
    let id: String
    let image: String
    let date: String
    let month: String
    let like: String
    let rating: String
    let heading: String
    let place: String
    let article: String
    let more: String
    

【问题讨论】:

目前有什么问题? 我已经知道它需要使用 ObservedObject 来控制来自 developer.apple.com/tutorials/swiftui 的数据,但在示例中它是用于切换,我无法使用 swiftui 按钮 【参考方案1】:

你可以这样做。

您可以通过.prefix() 从数组中加载前 10 个或 50 个。

演示代码

struct DataModel: Identifiable 
    var id = UUID()
    var number: Int
    
    init(_ number: Int) 
        self.number = number
    


struct LoadMoreDemo: View 
    
    private var arrData: [DataModel] = (0...100).map(DataModel($0))
    
    @State private var isMore: Bool = false
    
    var body: some View 
        VStack 
            ScrollView 
                ForEach( (isMore ? arrData : Array(arrData.prefix(15))))  item in
                    Text("\(item.number)")
                
            
            
            Button("Load More") 
                withAnimation 
                    isMore.toggle()
                
            
        
    

【讨论】:

以上是关于Swiftui 为 Json 数据项创建加载更多按钮的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 没有加载数据

SwiftUI:尝试加载本地 JSON 数据时,Canvas 出现预览错误

SwiftUI TabView 如何在第二个选项卡单击时加载更多数据

使用本地 JSON 中的键:值更改按钮/标签文本 - SwiftUI

在 SwiftUI 中将加载的 json 文件中的更改保存到 Core Data

JSON 列表在 SwiftUI 中不可见