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