全新Swift从入门到进阶实战探探iOS APP「慕FX」

全新Swift从入门到进阶实战探探iOS APP

核心代码,注释必读

// download:ukoou.com/resource/1630

Swift介绍 Swift是Apple在2014年6月WWDC发布的全新编程语言,中文名和logo是"雨燕" Swift之父Chris Lattner Clang编译器作者、LLVM项目的主要发起人 从Apple离职后,先后跳槽到Tesla、Google 目前在Google Brain从事AI研究

Swift编译流程 Swift Code --> Swift AST --> Raw Swift IL --> Canonical Swift IL --> LLVM IR --> Assembly --> Executable

swiftc swiftc存放在Xcode内部 Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 一些操作 生成语法树:swiftc -dump-ast main.swift 生成最简洁的SIL代码:swiftc -emit-sil main.swift 生成LLVM IR代码: swiftc -emit-ir main.swift -o main.ll 生成汇编代码: swiftc -emit-assembly main.swift -o main.s 对汇编代码进行分析,可以真正掌握编程语言的本质

全新Swift基础语法介绍

常量与变量

在Swift中规定,定义一个标识符的时候必须明确说明该标识符是常量还是变量:

使用let来定义常量,定义之后不可修改;

使用var来定义变量,定义之后可以修改。

kotlin 复制代码
let a: Int = 2a = 3//会报错,因为a是常量,不可以修改
var b: Int = 6b = 8//正常运行,b是变量,可以修改

复制

基本数据类型

Swift中的基本数据类型包括:整型、浮点型、Bool型

整型

有符号整型

Int8:有符号8位整型

Int16:有符号16位整型

Int32:有符号32位整型

Int64:有符号64位整型

Int:默认,和平台相关,相当于OC中的NSInteger

无符号整型

UInt8:无符号8位整型

UInt16:无符号16位整型

UInt32:无符号32位整型

UInt64:无符号64位整型

UInt:默认,和平台相关,相当于OC中的NSUInteger

浮点型

Float:32位浮点型

Double:64位浮点型(默认)

Bool型

true:真

false:假

全新Swift从入门到进阶实战探探iOS APP - SwiftUI

首先,确保你的 Mac 上安装了最新版本的 Xcode,并且你已经创建了一个新的 SwiftUI 应用程序项目。

1. 创建数据模型

在你的项目中创建一个新的 Swift 文件,命名为 TodoItem.swift,并定义待办事项的数据模型:

swift 复制代码
import Foundation

struct TodoItem: Identifiable {
    let id: UUID
    var name: String
    var isCompleted: Bool = false
    
    init(name: String) {
        self.id = UUID()
        self.name = name
    }
}

2. 创建视图以显示待办事项列表

创建一个新的 SwiftUI 视图文件,命名为 TodoListView.swift

swift 复制代码
import SwiftUI

struct TodoListView: View {
    @State private var todos = [TodoItem]() // 存储待办事项的数组
    @State private var showingAddTodo = false // 添加待办事项视图的状态
    
    var body: some View {
        NavigationView {
            List {
                ForEach(todos) { todo in
                    HStack {
                        Image(systemName: todo.isCompleted ? "checkmark.circle.fill" : "circle")
                        Text(todo.name)
                        Spacer()
                    }
                    .contentShape(Rectangle()) // 使整个行可点击
                    .onTapGesture {
                        // 点击时切换完成状态
                        todo.isCompleted.toggle()
                    }
                }
                .onDelete: { index in
                    // 删除选中的待办事项
                    self.todos.remove(at: index)
                }
            }
            .navigationBarTitle("Todo List")
            .navigationBarItems(trailing: Button(action: {
                self.showingAddTodo = true
            }) {
                Image(systemName: "plus")
            })
            .sheet(isPresented: $showingAddTodo) {
                // 添加待办事项的表单视图
                AddTodoView(todos: self.$todos)
            }
        }
    }
}

3. 创建添加待办事项的表单视图

创建一个新的 SwiftUI 视图文件,命名为 AddTodoView.swift

swift 复制代码
import SwiftUI

struct AddTodoView: View {
    @Binding var todos: [TodoItem] // 绑定到待办事项数组的引用
    
    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Add a new todo")) {
                    TextField("Todo name", text: Binding(
                        get: { self.todos.first?.name ?? "" },
                        set: { _ in }
                    ))
                    .textInputAutocapitalization(.words)
                    .disableAutocorrect(true)
                    .onAppear {
                        if self.todos.isEmpty {
                            self.todos.append(TodoItem(name: ""))
                        }
                    }
                }
                Section {
                    Button(action: {
                        // 添加新的待办事项
                        if let todoName = self.todos.first?.name, !todoName.isEmpty {
                            self.todos.first?.name = todoName.trimmingCharacters(in: .whitespacesAndNewlines)
                            self.todos.append(TodoItem(name: ""))
                        } else {
                            self.todos.removeFirst()
                        }
                        self.todos.removeAll { $0.name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty }
                        self.todos.sort { $0.name < $1.name }
                        self.todos[0].name = "" // 清空第一个待办事项的文本字段
                    })
                    {
                        Text("Add")
                    }
                    .padding()
                }
            }
            .navigationBarTitle("Add Todo")
            .navigationBarItems(trailing: Button(action: {
                self.todos.removeFirst() // 关闭表单时清空文本字段
            }) {
                Text("Cancel")
            })
        }
    }
}

4. 设置主视图

在你的 ContentView.swift 文件中,设置应用程序的主视图:

swift 复制代码
import SwiftUI

struct ContentView: View {
    var body: some View {
        TodoListView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

5. 运行应用程序

现在,你可以运行你的 SwiftUI 应用程序了。在 Xcode 中,选择你的设备或模拟器,然后点击运行按钮。你应该会看到一个简单的待办事项列表应用程序,你可以添加新的待办事项、查看它们,并标记为已完成。

这个示例展示了 SwiftUI 的基本用法,包括状态管理、数据绑定、列表渲染、表单创建和导航。通过这个实战项目,你可以开始探索 SwiftUI 的更多高级特性和功能。

相关推荐
丿Wayne1 小时前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
终端安全笔记21 小时前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
大熊猫侯佩1 天前
独立 App 首发完成 iPhone Duo 展开态适配
ios·swiftui·swift
光影少年1 天前
setImmediate 和 setTimeout(0) 的区别
android·前端·react.js·ios·前端框架
2501_916008891 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
HouWan2 天前
Flutter: MediaQuery.of(context) 为什么可能拖慢页面?
android·flutter·ios
用户38034165882972 天前
Broadcast Extension 里的 Live Activity:一次跨进程妥协
ios·音视频开发
匠测AI说2 天前
XCUITest 自动化全解:同进程白盒、XCTest 架构、自动同步机制与 iOS 端选型指南
测试工具·ios·自动化
silianpan2 天前
CAD 文档预览 UTS 插件
android·ios·harmonyos