Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 创建一个完整的 SwiftUI 应用

创建一个完整的 SwiftUI 应用

在本指南中,我们将创建一个简单的 SwiftUI 应用,展示如何构建一个基本的待办事项(To-Do List)应用。这个应用将包含添加任务、显示任务列表、标记任务为完成以及删除任务的功能。

1. 创建项目

打开 Xcode,选择 "Create a new Xcode project",然后选择 "App" 模板。输入项目名称(例如 "ToDoList"),选择 Swift 作为编程语言,SwiftUI 作为用户界面。

2. 定义数据模型

首先,我们需要定义一个数据模型来表示待办事项。

import Foundation

struct Task: Identifiable {
    let id = UUID()
    var title: String
    var isCompleted: Bool = false
}

3. 创建视图模型

接下来,我们将创建一个视图模型来管理任务的状态。

import Combine

class TaskViewModel: ObservableObject {
    @Published var tasks: [Task] = []
    
    func addTask(title: String) {
        let newTask = Task(title: title)
        tasks.append(newTask)
    }
    
    func toggleTaskCompletion(task: Task) {
        if let index = tasks.firstIndex(where: { $0.id == task.id }) {
            tasks[index].isCompleted.toggle()
        }
    }
    
    func deleteTask(at offsets: IndexSet) {
        tasks.remove(atOffsets: offsets)
    }
}

4. 创建主视图

在 ContentView 中,我们将创建一个用户界面,允许用户添加任务并显示任务列表。

import SwiftUI

struct ContentView: View {
    @StateObject private var viewModel = TaskViewModel()
    @State private var newTaskTitle: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                TextField("New Task", text: $newTaskTitle)
                    .padding()
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                
                Button(action: {
                    viewModel.addTask(title: newTaskTitle)
                    newTaskTitle = ""
                }) {
                    Text("Add Task")
                        .padding()
                        .background(Color.blue)
                        .foregroundColor(.white)
                        .cornerRadius(5)
                }
                
                List {
                    ForEach(viewModel.tasks) { task in
                        HStack {
                            Text(task.title)
                            Spacer()
                            if task.isCompleted {
                                Image(systemName: "checkmark")
                            }
                        }
                        .contentShape(Rectangle())
                        .onTapGesture {
                            viewModel.toggleTaskCompletion(task: task)
                        }
                    }
                    .onDelete(perform: viewModel.deleteTask)
                }
            }
            .navigationTitle("To-Do List")
            .padding()
        }
    }
}

5. 更新 App 主体

在 ToDoListApp.swift 文件中,我们将使用 ContentView 作为主视图。

import SwiftUI

@main
struct ToDoListApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

6. 运行应用

现在,你可以运行应用。在模拟器或设备中,你应该能够添加任务,查看任务列表,标记任务为完成,和删除任务。

7. 总结

  • 数据模型:使用 Task 结构表示任务。
  • 视图模型:使用 TaskViewModel 管理任务列表的状态。
  • 用户界面:使用 SwiftUI 组件构建添加任务和显示任务列表的界面。
  • 交互:实现了任务的添加、完成和删除功能。

通过这个简单的应用示例,你可以了解到如何使用 SwiftUI 和 Combine 创建一个完整的应用。根据需求,你可以进一步扩展功能,例如添加持久化存储、过滤任务、编辑任务等。

Last Updated:: 11/4/24, 12:23 PM