网站首页 > 技术文章 正文
置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
“不积跬步,无以至千里;不积小流,无以成江海”
继续
上文中已经实现在设置界面中有一个退出按钮,点击后将弹出登陆弹框
并且退出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!如何解决)
- 最近发表
- 
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
- [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
- 超详细手把手搭建在ubuntu系统的FFmpeg环境
- Nginx运维之路(Docker多段构建新版本并增加第三方模
- 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
- Go 人脸识别教程_piwigo人脸识别
- 安卓手机安装Termux——搭建移动服务器
- ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
- Rust开发环境搭建指南:从安装到镜像配置的零坑实践
- Windows系统安装VirtualBox构造本地Linux开发环境
 
- 标签列表
- 
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
 
