网站首页 > 技术文章 正文
置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
“不积跬步,无以至千里;不积小流,无以成江海”
继续
上文中已经实现在设置界面中有一个退出按钮,点击后将弹出登陆弹框
并且退出app后登陆状态也同步消失
那么本文进入TODO页面本身的编写,效果如下:
在这里插入图片描述
实现
TODO List 的基本逻辑:
- 首先有一个数组,里面存储的是所有的todo内容
- 然后用一个List循环这个数组,每一条todo上应有删除的功能
- 顶部应该有一个输入框,可以新增todo,应有一个确认按钮 ( 这些就是之前绑定的内容了 )
实现的代码如下:
import SwiftUI
struct TodoView: View {
// 是否已经登陆
@AppStorage("isLogin") private var isLogin:Bool = false;
// 已经登陆的用户名
@AppStorage("userName") private var userName:String = "";
// todoList 数组,里面是一个字符串
@State private var todoLists:[String] = ["TODO第一条","TODO第二条"];
// 输入框输入的新的TODO
@State private var newItem:String = "";
// 向 todolist 添加一条,并清空填写的todo内容
func addOne(){
// 如果没有填写则退出,避免加一些空的数据上去
if(newItem == ""){
return ;
}
todoLists.append(newItem);
newItem = "";
}
// 从 todolist 里面删除指定的一条
func deleteOne(index:Int){
todoLists.remove(at: index);
}
var body: some View {
VStack{
HStack{
TextField("请输入新的TODO",text:$newItem).onSubmit {
addOne()
}
Button("确认"){
addOne()
}
}.padding()
List{
// Foreach 开始循环 TodoLists 的indices,需要它的索引值,用于删除等
// id 需要为一个 Identifier,可以预见,之后我们自己构造数据类型的时候也需要一个 Identifier
ForEach(todoLists.indices ,id: \.self ){ i in
HStack{
// 字符串拼接,之前已有使用
Text("第\(i+1)条:\(todoLists[i])")
Spacer()
// 删除图标,点击后删除本项
Image(systemName: "trash").onTapGesture {
deleteOne(index: i)
}
}
}
}
}
}
}
struct TodoView_Previews: PreviewProvider {
static var previews: some View {
TodoView()
}
}
具体实现方式的解析如代码中的注释。
总结
- List 下的 Foreach 相当于 vue 中的 v-for="(item,index) in todoLists"
- Methods 可以直接写在 结构体中,变量也可以直接使用,这与 vue3 的 setup script 比较类似
- onClick 事件,改为了 onTapGesture 事件。
猜你喜欢
- 2024-09-29 手帐中的“TO DO LIST”,帮你做好每日管理
- 2024-09-29 TO DO LIST(TODOLiST是什么意思)
- 2024-09-29 工作中使用任务清单(To Do List)的4个益处
- 2024-09-29 China’s Leading Chipmaker AMEC Says its Inclusion onto CMC List Unreasonable
- 2024-09-29 春日To-Do List:去看一场有形有声的展览
- 2024-09-29 iOS限免App精选:Sure - 会定位可加密的To-Do(¥6→0)
- 2024-09-29 安卓待办清单,任务管理工具:To-do-List v1.01.99.0705 高级版
- 2024-09-29 详解Linux中的expect用法--实现shell脚本自动交互
- 2024-09-29 实测:微软出的免费待办 App,到底有多智能?
- 2024-09-29 写下来更易于执行!to do list!(写下来更易于执行!to+do+list!如何解决)
- 1507℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 516℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 489℃MySQL service启动脚本浅析(r12笔记第59天)
- 468℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 466℃启用MySQL查询缓存(mysql8.0查询缓存)
- 446℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 426℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 423℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)