全新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 的更多高级特性和功能。

相关推荐
crasowas17 小时前
iOS - 超好用的隐私清单修复脚本(持续更新)
ios·app store
ii_best19 小时前
ios按键精灵脚本开发:ios悬浮窗命令
ios
Code&Ocean1 天前
iOS从Matter的设备认证证书中获取VID和PID
ios·matter·chip
/**书香门第*/1 天前
Laya ios接入goole广告,开始接入 2
ios
恋猫de小郭2 天前
什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
flutter·ios·swiftui
网安墨雨2 天前
iOS应用网络安全之HTTPS
web安全·ios·https
福大大架构师每日一题2 天前
37.1 prometheus管理接口源码讲解
ios·iphone·prometheus
BangRaJun3 天前
LNCollectionView-替换幂率流体
算法·ios·设计
刘小哈哈哈3 天前
iOS 多个输入框弹出键盘处理
macos·ios·cocoa
靴子学长3 天前
iOS + watchOS Tourism App(含源码可简单复现)
mysql·ios·swiftui