SwiftUI入门 - 7.todo页面-List循环数组

置顶

菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行

“不积跬步,无以至千里;不积小流,无以成江海”

继续

上文中已经实现在设置界面中有一个退出按钮,点击后将弹出登陆弹框

并且退出app后登陆状态也同步消失

那么本文进入TODO页面本身的编写,效果如下:
在这里插入图片描述

实现

TODO List 的基本逻辑:

  1. 首先有一个数组,里面存储的是所有的todo内容
  2. 然后用一个List循环这个数组,每一条todo上应有删除的功能
  3. 顶部应该有一个输入框,可以新增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()
    }
}

具体实现方式的解析如代码中的注释。

总结

  1. List 下的 Foreach 相当于 vue 中的 v-for="(item,index) in todoLists"
  2. Methods 可以直接写在 结构体中,变量也可以直接使用,这与 vue3setup script 比较类似
  3. onClick 事件,改为了 onTapGesture 事件。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我码玄黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值