全新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来界说变量,界说之后能够修正。
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
,并界说待办事项的数据模型:
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
:
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
:
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
文件中,设置应用程序的主视图:
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 的更多高级特性和功能。