八、ArkTS-语句-类型进阶与渲染控制

news/2024/12/13 19:47:56/文章来源:https://www.cnblogs.com/xiaGuangHui/p/18605729

1.对象数组

1.1定义对象数组

它是一个自定义对象类型的数组,数组元素是自己定义对象类型的对象,就是数组元素是对象,数组类型是自定义对象的类型

//第一步通过接口定义对象
interface student{stuID:number,name:string,gender:string,age:number
}//基于接口创建对象数组
let stuShuZu:student[]=[{stuID:1,name:'小明',gender:'高三',age:17},{stuID:1,name:'大明',gender:'高三',age:19},{stuID:1,name:'二明',gender:'高三',age:18},{stuID:1,name:'天明',gender:'高三',age:17}
]//这是一个对象数组类型
stuShuZu
//这是一个对象类型
stuShuZu[0]//需求:获取每一个学生的年龄, 
//看到数组每一个XXX,就要想到遍历
for (let item of stuShuZu){console.log('学生的姓名是',item.name)
}@Entry
@Component
struct Index {//组件的状态变量@State count:number=1build() {Column(){}.width('100%').height('100%').backgroundColor('#eee').padding({top:15,right:15,left:15})}
}

1.2使用对象数组

  • 访问某一个对象:
    • **每一对象在数组中都是有对应的下标的, 可以通过 数组名[下标] 访问 **
  • 访问某一对象的某一个属性
    • 先找到要访问的对象, 在该对象的属性访问属性 数组名[下标].属性名 访问
  • 依次访问每一个对象
    • for ... of 进行访问即可

//第一步通过接口定义对象
interface student{stuID:number,name:string,gender:string,age:number
}//基于接口创建数组对象
let stuShuZu:student[]=[{stuID:1,name:'小明',gender:'高三',age:17},{stuID:1,name:'大明',gender:'高三',age:19},{stuID:1,name:'二明',gender:'高三',age:18},{stuID:1,name:'天明',gender:'高三',age:17}
]//使用数组,  因为数组对象不能直接在日志中显示,  想要在日志中显示需要调用方法转成字符串
console.log('打印数组对象',stuShuZu)//包含对象的复杂数据,  如果想在日志中打印,  需要需要调用一个方法,  转成字符串
//JSON.stringify(复杂类型)对象/数值
console.log('打印数组对象',JSON.stringify(stuShuZu))//具体使用(访问->数组下标)
console.log('数组中第二位是',stuShuZu[1].name)
console.log('数组中第二位的信息',stuShuZu[1])//没有调用方法,  打印出来是Object
console.log('数组中第二位的信息',JSON.stringify(stuShuZu[1]))//也支持遍历,  for...of和普通for
for(let item of stuShuZu){console.log('数组对象中的每一项',JSON.stringify(item))
}@Entry
@Component
struct Index {//组件的状态变量@State count:number=1build() {Column(){}.width('100%').height('100%').backgroundColor('#eee').padding({top:15,right:15,left:15})}
}

2.ForEach - 渲染控制

当我们页面中的区域中有多个样式相同的小区域,只有内容数据不一样的时候, 为了提升代码的复用率,不需要一个一个的编写UI组件,我们可以将所有的数据整合成一个数组, 并采取ForEach进行循环渲染.如下图区域,如果我们分别实现每个栏目,代码太过于冗余,这时就可以使用ForEach进行渲染了

画板

2.1ForEach语法

可以基于数组元素的个数, 来渲染组件的个数(简化代码),根据数组长度循环渲染组件个数

语法:** ForEach(arr, (item, index)=>{这里写循环渲染的内容})**

arr: 要渲染的数组,

(item, index): (item: 是每一项+类型, index: 是下标) -> 是形参

参数 参数类型 参数说明
arr Array 数据源, 根据该数组生成对应的UI组件渲染到页面中:
+ 可以为空数组
UI组件生成函数 (item: any, index?: number) => void UI组件生成函数
+ 为数组中的每个元素创建对应的组件
+ item: 代表每一个数组元素, 类型与数组元素保持一致,不可以省略
+ index: 代表每一个数组元素的下标,可以省略

@Entry
@Component
struct Index {//用装饰器定义了一个数组@State stu:string[]=['大明','二明','小明','天命','耳顺','随心所欲']build() {Column(){//ForEach渲染控制,  //item是形参,可以自己定义写法// ()=>{} 第一个 参数1 - 永远都是表示数组每一项 // 				第二个 参数2 - 永远都是数组下标 - 不取决于命名,只取决于位置ForEach(this.stu,(item:string,index)=>{Text(`${item},${index+1}`).fontColor(Color.Green).fontSize(20).fontWeight(500).padding(10)}) }.width('100%').height('100%').backgroundColor('#eee').padding({top:15,right:15,left:15})}
}
//接口要定义到程序入口@Entry外
interface news{title:string,createTime:string,
}
@Entry
@Component
struct Index {@State articles: news[]=[{title:'近200+自动驾驶数据集全面调研!一览如何数据闭环全流程', createTime:'2024-01-31 09-59:43'},{title:'近200+自动驾驶数据集全面调研!一览如何数据闭环全流程', createTime:'2024-01-31 09-59:43'},{title:'近200+自动驾驶数据集全面调研!一览如何数据闭环全流程', createTime:'2024-01-31 09-59:43'},{title:'近200+自动驾驶数据集全面调研!一览如何数据闭环全流程', createTime:'2024-01-31 09-59:43'},]build() {Column(){//ForEach渲染控制,ForEach(this.articles,(item:news,index)=>{Column(){Text(`${item.title}`).fontColor('#000').fontWeight(500).padding(10).width('100%')Text(`${item.createTime}`).fontColor('#999').fontSize(14).fontWeight(500).padding(10).width('100%')}})  }.width('100%').height('100%').backgroundColor('#eee').padding({top:15,right:15,left:15})}
}

2.2ForEach使用优化代码

原始代码

完整代码

3.Math对象

Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法, Math 用于 Number 类型数据的处理.

对象方法 是否需要参数 方法描述
Math.random() + 随机数
+ 取值范围 [0, 1)之间的随机小数,左闭右开, 可以取到0,但是取不到1
Math.ceil() + 需要一个数字形参数
+ 总是向上取整
Math.floor() + 需要一个数字形参数
+ 总是向下取整
  • 代码测试
// 1. 随机数
console.log('Math对象', Math.random())  // 0-1 之间的随机小数// 2. 向上取整
console.log('Math对象', Math.ceil(1.1))  // 2
console.log('Math对象', Math.ceil(1.9))  // 2// 3. 向下取整
console.log('Math对象', Math.floor(1.1))  // 1
console.log('Math对象', Math.floor(1.9))  // 1
  • 求0--10之间的随机整数
// 0-10 之间的随机数
console.log('Math对象', Math.random() * 11)// 0-10 之间的随机 整数
console.log('Math对象', Math.floor(Math.random() * 11))
  • 求n--m之间的随机数
//计算n-m的随机数
let n:number=1
let m:number=10
console.log('n-m的随机数',Math.floor(Math.random()*(m-n+1))+1);//这种写法0是取不到的, 或者取到0的概率极小
console.log('随机数',Math.ceil(Math.random()*2));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/852065.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CodeBolcks+Windows API下的C++编程教程——给你的项目中添加资源文件和图标

0.前言 我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。 了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:…

20222402 2024-2025-2 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.1本周学习内容 网络攻击基本模式 ①截获 嗅探 监听 ②篡改 数据包篡改 ③中断 拒绝服务 ④伪造 欺骗 IP 源地址欺骗: 伪造具有虚假源地址的 IP 数据包进行发送√目的:隐藏攻击者身份、假冒其他计算机通过身份验证 1.2实验内容及要求 本实践的目标理解常用网络欺诈…

转载:【AI系统】LLVM IR 基本概念

在上一篇文章中,我们已经简要介绍了 LLVM 的基本概念和架构,我们现在将更深入地研究 LLVM 的 IR(中间表示)的概念。 了解 LLVM IR 的重要性是为了能够更好地理解编译器的运作原理,以及在编译过程中 IR 是如何被使用的。LLVM IR 提供了一种抽象程度适中的表示形式,同时能够…

转载:【AI系统】AI 框架基础介绍

什么是 AI 算法?什么是神经网络?神经网络有什么用?为什么神经网络需要训练?什么是模型?AI 框架有什么用?AI 框架能解决什么问题? 上面的几个问题其实还挺有挑战的,也是本文需要回答的一个问题。下面来对一些基础概念进程澄清:首先深度学习是机器学习研究领域中的一种范…

转载:【AI系统】谷歌 TPU v1-脉动阵列

本文深入探讨了谷歌 TPU v1 的架构和设计原理。我们将解析 TPU v1 芯片的关键元素,包括 DDR3 DRAM、矩阵乘法单元(MXU)、累加器和控制指令单元。重点介绍脉动阵列(Systolic Array)的工作原理,它是 TPU 的核心,通过数据的流水线式处理实现高效的矩阵乘法计算。此外,我们…

GitLab安装使用

GitLab安装GitLab的安装 1. 环境配置 关闭防火墙和selinux [root@gitlab ~]# systemctl stop firewalld [root@gitlab ~]# systemctl disable firewalld Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service". Removed "/etc/systemd/syst…

2024-2025-1 20241401 《计算机基础与程序设计》 第十二周学习总结

班级链接 2024计算机基础与程序设计作业要求 第十二周作业教材学习内容总结 《C语言程序设计》第11章指针与一维数组间的关系: 指针和一维数组之间的联系,包括如何使用指针访问数组元素等。 指针与二维数组间的关系: 指针与二维数组交互的方式,以及相关的访问方法。 指针数…

转载:【AI系统】编译器基础介绍

随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代。AI 编译器就成了应对以上问题广受关注的技术方向,让用户仅需专注于上层模型开发,降…

转载:【AI系统】昇腾 AI 处理器

本文将会介绍华为昇腾 AI 处理器的架构与卷积加速原理。昇腾 AI 处理器是华为基于达芬奇架构专为AI计算加速而设计的处理器,它支持云边端一体化的全栈全场景解决方案,具有高能效比和强大的 3D Cube 矩阵计算单元,支持多种计算模式和混合精度计算。 昇腾 AI 处理器的架构包括…

转载:【AI系统】CPU 计算时延

CPU(中央处理器)是计算机的核心组件,其性能对计算机系统的整体性能有着重要影响。CPU 计算时延是指从指令发出到完成整个指令操作所需的时间。理解 CPU 的计算时延对于优化计算性能和设计高效的计算系统至关重要。在本文中我们将要探讨 CPU 的计算时延组成和影响时延产生的因…

转载:【AI系统】昇腾 AI 架构介绍

昇腾计算的基础软硬件是产业的核心,也是 AI 计算能力的来源。华为,作为昇腾计算产业生态的一员,是基础软硬件系统的核心贡献者。昇腾计算软硬件包括硬件系统、基础软件和应用使能等。 而本文介绍的 AI 系统整体架构(如图所示),则是对应与昇腾 AI 产业的全栈架构较为相似。…