美文网首页SwiftUISwiftUI
基于 SwiftUI 创建一个可删除、可添加列表项的列表

基于 SwiftUI 创建一个可删除、可添加列表项的列表

作者: 小牛仔kx | 来源:发表于2019-08-26 11:11 被阅读0次

执行环境

  • macOS Mojave: 10.14.5
  • xcode: Version 11.0 beta 6 (11M392q)

预览效果

new.gif

完整代码

import SwiftUI

class Item: Identifiable {
    var uuid: Int;
    var title: String
    
    init(title: String) {
        self.title = title
        self.uuid = generatteID()
    }
}

func _generateID() -> () -> Int {
    var id = 0
    
    return {
        id += 1
        return id
    }
}

var generatteID = _generateID()

struct ContentView: View {
    @State var list: [Item] = [
        Item(title: "A"),
        Item(title: "B"),
        Item(title: "C"),
        Item(title: "D"),
        Item(title: "E"),
    ]

    func delItemBy(uuid: Int) {
        let index = list.firstIndex(where: { $0.uuid == uuid })
        
        if index != nil {
            list.remove(at: index!)
        }
    }
    
    func push() {
        list.append(Item(title: "F"))
    }
    
    func remove() {
        list.removeLast()
    }
    
    var body: some View {
        NavigationView {
            List {
                ForEach(list) { item in
                    Button(action: { self.delItemBy(uuid: item.uuid) }) {
                        Text(item.title + item.uuid.description)
                    }
                }
            }
            .navigationBarTitle(Text("List"))
            .navigationBarItems(leading: Button(action: { self.push() }) { Text("Append") }, trailing: Button(action: { self.remove()}) { Text("RemoveLast") })
        }
    }
}

代码剖析

利用闭包创建一个自增长的 ID 生成器

func _generateID() -> () -> Int {
    var id = 0
    
    return {
        id += 1
        return id
    }
}

var generatteID = _generateID()

定义数据结构

class Item: Identifiable {
    var uuid: Int;
    var title: String
    
    init(title: String) {
        self.title = title
        self.uuid = generatteID()
    }
}
  • Item 实现了 Identifiable 协议,用来在 List 中可循环遍历功能
  • 每次创建这个对象时内部的成员变量 uuid 会调用 generatteID 方法获取自增长的 id

视图部分代码

详解参考注释

struct ContentView: View {
    // 使用 @State 属性包裹器,修饰 list 属性,关联视图的关系。
    // 修改属性值,视图也会更新
    @State var list: [Item] = [
        Item(title: "A"),
        Item(title: "B"),
        Item(title: "C"),
        Item(title: "D"),
        Item(title: "E"),
    ]

    // 删除 list 里的数据
    func delItemBy(uuid: Int) {
        let index = list.firstIndex(where: { $0.uuid == uuid })
        
        if index != nil {
            list.remove(at: index!)
        }
    }
    
    // 追加数据
    func push() {
        list.append(Item(title: "F"))
    }
    
    // 删除数据
    func remove() {
        list.removeLast()
    }
    
    var body: some View {
        // 使用导航视图
        NavigationView {
            // 定义一个列表
            List {
                // 循环数据源
                ForEach(list) { item in
                    // 使用按钮,绑定事件
                    Button(action: { self.delItemBy(uuid: item.uuid) }) {
                        Text(item.title + item.uuid.description)
                    }
                }
            }
            .navigationBarTitle(Text("List")) // 设置导航视图的 Title
            .navigationBarItems(leading: Button(action: { self.push() }) { Text("Append") }, trailing: Button(action: { self.remove()}) { Text("RemoveLast") }) // 设置顶部的按钮
        }
    }
}

运行代码

相关文章

  • 基于 SwiftUI 创建一个可删除、可添加列表项的列表

    执行环境 macOS Mojave: 10.14.5 xcode: Version 11.0 beta 6 (11...

  • 2017.9.27

    上午老师讲了知识点列表框的基本操作,先是添加列表项,控件等,实现可以删除或者查找列表项,在列表项中添加程序,把列表...

  • html列表

    1.无序列表 用法如下: 效果如下: 列表项内容1 列表项内容2 列表项内容3 无序列表可添加的属性为: disc...

  • 芦继超9.27总结

    今天上午老师讲了列表框的基本操作,先是添加列表项,然后实现可以删除或者查找列表项,在列表项中添加程序,中间也出现过...

  • 缓存数据框

    搜索列表框 + 操作列表数据源添加数据:1.添加搜索框输入数据2.搜索不到列表项才能添加3.删除搜索到的选中列表项

  • Python基础11

    第七章高级数据类型 7.1列表 7.1.1列表及其基本属性 列表的特点:可新增,可删除,可重复,包含类型可以不同。...

  • Android--ListView的简单使用

    ListView是显示垂直可滚动的列表项视图,列表项的来源可以使用一个适配Adapter,Adapter可将内容从...

  • 「DOM 编程」列表操作

    列表操作 列表的常用形式有图片形式与信息形式的,常见的有如下的操作: 显示列表 选择列表项 新增列表项 删除列表项...

  • BOM和DOM(二)

    DOM优化 逐个地添加列表项,将导致浏览器反复渲染新信息,使用一个文档片段来保存创建的列表项,最后一次性地将它们添...

  • DDL-数据定义语言

    1、库 创建数据库 删除数据库 2、表 创建表 删除表 3、列 增加列 删除列 修改列 4、键 添加主键 删除主键...

网友评论

    本文标题:基于 SwiftUI 创建一个可删除、可添加列表项的列表

    本文链接:https://www.haomeiwen.com/subject/dylrectx.html