微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Swiftui 为 Json 数据项创建加载更多按钮

我还没有达到 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://stackoverflow.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
    
}

解决方法

你可以这样做。

您可以通过 .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()
                }
            }
        }
    }
}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。