SwiftUI 2.0 实现无限滚动的分页列表(高性能含源码)

本文价值与收获

看完本文后,您将能够作出下面的界面

无限滚动的分页列表

无限滚动的分页列表

实战需求

我们平时构建的应用基本上都是列表类应用,例如待办事项列表、微博、微信朋友圈和视频列表等。这些列表都是可以无限滚动的,那这个功能该如何实现呢。本篇文章将告诉大家个非常简单高效的构建无限滚动List的方法,而且该方法还不会有性能问题。

列表实现目前有两种方法,一种List,另外一种Scrollview。在wwdc20之前,我不太推荐大家使用ScrollView,但是wwdc20对scrollview进行了全面改造,在性能和灵活性上都有很大提高。下面我就给大家制作两版无限分页列表。

实战代码

1、List版

struct EndlessList: View {
  @StateObject var dataSource = ContentDataSource()

  var body: some View {
    List {
      ForEach(dataSource.items) { item in
        Text(item.label)
          .onAppear {
            dataSource.

热门文章

暂无图片
编程学习 ·

蒙哥马利模乘

Montgomery乘法的数学表达式是A * B * R ^ (-1)mod M。A、B是同位长大数,R是2的M(位长)的次方,R ^ (-1)是指R相对于M的模逆,即R ^ (-1)满足以下条件的数:R * R ^ (-1) mod M = 1;这个条件成立的充要条件是R与M互素,这一点只需要M为奇数即可。 使用蒙哥马利乘法可以做…
暂无图片
编程学习 ·

javascript 实现所有浏览器异步加载的工具

javascript 实现所有浏览器异步加载的工具 //异步加载 实现 function loadScript(url, callback){ //新建一个script 元素 var script = document.createElement(‘script’); //再往script中添加类型 script.type=“text/javascript”; if(script.readyState){ //每当 rea…
暂无图片
编程学习 ·

JS面试题

霖呆呆的近期面试128题汇总(含超详细答案) | 掘金技术征文 由浅入深,66条JavaScript面试知识点 2020 前端面试 | 第一波面试题总结 2020 前端面试 | 第二波面试题总结 window.onload和$(document).ready()区别 window.onload必须等到页面内的所有元素加载完毕后才能执行 所有元…
暂无图片
编程学习 ·

数据结构与数据类型

数据结构与数据类型数据类型是面向应用领域的具体化,同时面向计算机系统底层是为了确定分配的内存容量的大小。 在C,JAVA等静态类型的编程语言中,编译器根据数据类型,提前在内存的进程的栈中分配特定 大小的空间。C 的malloc,和Java的new是动态分配大块内存的,提前在内存…
暂无图片
编程学习 ·

python读取excel文件(xlrd)

调包import xlrd打开文件data = xlrd.open_workbook(文件名.xlsx)查看页名print(data.sheet_names())输出sheet1、sheet2等页名,一般用不上,因为可以用下表取页获取某页sheet = data.sheet_by_name(sheet1) sheet = data.sheet_by_index(0)两个方法都行,一般用第二个,因为第…
暂无图片
编程学习 ·

javaEE核心技术规范

1、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口 JNDI是命名目录服务的抽象接口集合,为企业级应用提供了统一的标准化连接,使Java能够无缝地获取任何可目录化的企业信息。在JavaEE体系中,JNDI用来定位各种对象,包括EJB、数据库驱动、JDBC数据源及消…
暂无图片
编程学习 ·

SSCMS部署Linux

一、进入手册:https://sscms.com/ 二、在首页点击,如下位置:三、点击快速上手,进入页面如下:四、点击linux中运行SSCMS https://sscms.com/docs/v7/getting-started/using-linux.html#_1%E3%80%81%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E5%8C%85 根据里面的步骤一步步进行…
暂无图片
编程学习 ·

《剑指 Offer》——调整数组顺序使奇数位于偶数前面

1. 本题知识点 数组 2. 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 例如: Input: [1,2,3,4,5]Output: [1,3,5,2,4]3. 解题思路 …
暂无图片
编程学习 ·

火墙优化策略

实验环境 : 两台主机 一台可以连外网 一台只能内网连接 火墙切换方式及安装 iptables的安装及切换iptables -------->firewalldiptables 的永久保存策略iptables命令数据包状态 在服务器上:在客户主机中snat(13.30-14.00) 服务器主机:客户主机:在客户机中测试:fire…
暂无图片
编程学习 ·

深度学习之计算机视觉

在第3章中,使用了名为ResNet的流行的卷积神经网络(Convolutional Neural Network,CNN)架构构建了一个图像分类器,我们将此模型作为黑盒使用。本章将讨论卷积网络的重要组成部分。本章将涵盖如下重要主题:神经网络简介;从零开始构建CNN模型;创建和探索VGG16模型;计算预…
暂无图片
编程学习 ·

AssemblyInfo.cs文件参数具体讲解

AssemblyInfo.cs文件参数具体讲解 原文地址:https://www.cnblogs.com/scy251147/archive/2010/10/23/1859576.html 在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否…
暂无图片
编程学习 ·

2020.7.1崔庆才教材《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)

前情提要 首先附上崔大神的github源码:3.4爬取猫眼电影排行 毕竟此段代码完成时间较早,截至2020.7.1日,发现了此段代码中两个需要修改的地方。 希望能给学习崔大神的小白一些帮助,希望大家有个好前途。 一、猫眼电影反爬更新 下图是崔大神的代码:估计是太多人学习爬虫拿猫…
暂无图片
编程学习 ·

51单片机8*8点阵显示“中国”

#include <reg52.h> #include <intrins.h> //位移函数 sbit DIO=P3^4; //2片74HC595数据输入端 sbit S_CLK=P3^5;//串行输入时钟 sbit R_CLK=P3^6;//并行输出时钟 unsigned char code table[2][8]={0xEF,0xEF,0xEF,0x01,0x6D,0x01,0xEF,0xEF,0x01,0x7D,0x01,0x69,0…
暂无图片
编程学习 ·

centos 怎么安装 nginx

linux centos 7 安装 nginx 原文来自官网 : http://nginx.org/en/linux_packages.html Installation instructions Before you install nginx for the first time on a new machine, you need to set up the nginx packages repository. Afterward, you can install and updat…
暂无图片
编程学习 ·

mysql学习总结

连接数据库语句:mysql -h 服务器主机地址 -u 用户名 -p用户密码 基本的数据库操作命令: update user set password=password(‘123456’)where user=‘root’; 修改密码 flush privileges; 刷新数据库 show databases; 显示所有数据库 use dbname;打开某个数据库 show table…
暂无图片
编程学习 ·

6台路由器ospf+rip实验

一、环境OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个A…
暂无图片
编程学习 ·

python学习(一)

编写比较通用的一个可以画出像图4中那样花朵的函数集。import math import turtle def polyline(t, n, length, angle):"""Draws n line segments.t: Turtle objectn: number of line segmentslength: length of each segmentangle: degrees between segments&q…
暂无图片
编程学习 ·

Autosar4.4:通用架构模板 - 元建模模式与模型转换(2/3)

元模型化模式是参数化的结构,当将其应用于实际参数时,会产生规则的,非参数化的结构。 结构只是由关联和聚合关联的元类的集合。 模式的好处在于,它们允许重复使用重复结构,而无需重复其定义。 本章介绍元建模模式的概念,以及它们在AUTOSAR元模型中的使用和表示法。 另一个…
暂无图片
编程学习 ·

项目实训——初版的页面优化(2)

项目实训——初版的页面优化(2)题目太长的解决就业帮助具体内容的收起展开表格的美化 再次进行了一次小组会议,找到了更加多的需要优化和完善的地方。比如题目很容易出框,讨论区话题的显示需要限制长度等等。同时也新增一些功能,比如评论的删除。这篇先写完善。 题目太长的…
暂无图片
编程学习 ·

07:从一个二维数组中查找一个数

题目:从一个二维数组中查找一个数 数组要求:从左到右,从上到小依次递增的矩形二维数组 思路:我们从矩阵的右上角开始查找,若该位置的数值小于目标值,列数减一;若数值大于目标值,行数加一,后续重复。 public class Offer07 {public static void main(String[] args) {i…