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