Training Details 2021, July

WWDC

WWDC可以说是每年Apple发布新技术的盛会。作为开发者,我们不仅可以在其中找到Apple关于新技术的介绍,也可以看到很多Apple为初学者准备的教程。大家只需要在Mac或其他设备上下载Developer.app,就可以看到每年WWDC的全部内容。我们这次主要关注与SwiftUI相关的内容

〇 推荐大家先查看WWDC20Introduction to SwiftUI,通过官方的三明治App的例子对SwiftUI有一个简单的了解。

✡ WWDC20 Introduction to SwiftUI https://developer.apple.com/wwdc20/10119

这个talk介绍了swiftUI的基本特性。打开Xcode,编辑器的左侧显示了代码,右侧显示了一个带有该代码可视化表示的画布。在 SwiftUI 中,视图定义只是 Swift 代码,这意味着画布和代码编辑器只是查看和编辑相同代码的不同方式。如果在画布中选择某些内容,该选择也会反映在代码中。如果更改代码中的某些内容这种变化也反映在画布上。

操作演示:

  • 文本旁边添加一个图像
  • 更改为字体
  • 添加圆角矩形
  • NavigationView 支持在应用程序的不同部分之间导航
  • NavigationLink 接收要推送的目的地
  • ……

SwiftUI 中的视图非常轻巧。提取子视图几乎没有运行时开销。 SwiftUI 中的视图和传统 UI 框架中的视图完成相同的主要角色:它们定义了一个 UI。UI 编程中同步多线程代码很难。但是swiftUI淡化了它的难度。最重要的是能够在所有 Apple 平台之间使用相同的视图代码、模型代码和应用程序代码。也可以对特定平台进行改进。

〇 在学习Stanford课程的过程中,可以参考下面两个WWDC20的session,对SwiftUI里面的App Scene View@State @ObservedObject有更深入的了解,从而更好的管理自己的App层次App中的数据流动

✡ WWDC20 App essentials in SwiftUI https://developer.apple.com/wwdc20/10037

今年SwiftUI拓展了使用用于声明场景和应用程序的新 API 。可以仅使用 SwiftUI 构建整个应用程序。这个talk介绍了 SwiftUI 的场景架构,并展示如何自定义应用程序中的场景,简要概述了可用于自定义应用程序的不同 API,以及可以从哪里了解更多信息。

今年新增了 DocumentGroup 场景类型,它自动管理打开、编辑和保存基于文档的场景。更多信息在“在 SwiftUI 中构建基于文档的应用程序” session。

✡ WWDC20 Data Essentials in SwiftUI https://developer.apple.com/wwdc20/10040

【Instantiate a Model Object in a View】

Connect data to show in views with data defined in Model.

Model class:

class Book: ObservableObject {
	/// @Published: Once title changed, Views related with Book refreshed.
	/// @Published works when this class is an ObservableObject
    @Published var title = "Great Expectations" 
}

SwiftUI codes:

struct LibraryView: View {
    @StateObject var book = Book() // Book is a class conforming to ObservableObject. Only instantiating uses `@StateObject`
    
    var body: some View {
        BookView(book: book)
    }
}

struct BookView: View {
    @ObservedObject var book: Book // Here book is not an instance of Model. So yse @ObservedObject

    // ...
}

【Share an Object Throughout the App】

Save your time to pass arguments again and again if there are plenty of layers.

@main
struct BookReader: App {
    @StateObject var library = Library() // initiate ObservableObject with `@StateObject`
    
    var body: some Scene {
        WindowGroup {
            LibraryView()
                .environmentObject(library) // Here pass `library` to all sub-views of LibraryView().
        }
    }
}
struct LibraryView: View {
    @EnvironmentObject var library: Library // Get that EnvironmentObject
    
    // ...
}

【Manage Mutable Values】

〇 当层View中需要更改的值定义为@State var(因为要保存这个值,而不是每次refresh UI的时候值都回到初始值) 〇 当层View使用的不可更改的值,定义该值为let

〇 当层View需要给下层View传值、且下层View只是使用而不改变该值,下层View中定义该值为var 〇 当层View需要给下层View传值、且下层View会改变该值,下层View中定义该值为@Binding var,确保下层View改的是当层View值的引用(改的是同一个);当层View传递时写$foo

〇 某值只有当层和subView用,加private,上层View无法访问到该量

struct PlayerView: View {
    let episode: Episode
    @State private var isPlaying: Bool = false
    
    var body: some View {
        VStack {
            Text(episode.title)
            Text(episode.showTitle)
            PlayButton(isPlaying: $isPlaying) // Pass a binding.
        }
    }
}
struct PlayButton: View {
    @Binding var isPlaying: Bool
    
    var body: some View {
        Button(action: {
            self.isPlaying.toggle() // change isPlaying in sub-view. So use @Binding
        }) {
            Image(systemName: isPlaying ? "pause.circle" : "play.circle")
        }
    }
}

〇 通过下面这几个session,你可以看到每年苹果对SwiftSwiftUI的更新。2019年是Swift大版本Swift5.0推出的第一年,也是SwiftUI元年,再往前的WWDC和Swift与SwiftUI关系不大。

注:WWDC21的内容,在今年秋季、各平台新系统发布才能正式运用。感兴趣的同学可以 提前了解,但请注意没有办法在这个暑假使用。

WWDC21 What's new in Swift https://developer.apple.com/wwdc21/10192

WWDC20 What's new in Swift https://developer.apple.com/wwdc20/10170

WWDC19 What's new in Swift https://developer.apple.com/wwdc19/402

WWDC21 What's new in SwiftUI https://developer.apple.com/wwdc21/10018

WWDC20 What's new in SwiftUI https://developer.apple.com/wwdc20/10041

点进去之后,看完这些视频,可能会发现这些视频下面都会有一些相关的推荐,大家感兴趣也可以对WWDC推出的新内容做进一步的了解。

〇 还有一些WWDC19的session,但这些视频已经过时,而且苹果在WWDC20上对这些视频进行了更新,也就是在上面列出来的那些;所以虽然WWDC19对于SwiftSwiftUI来说很重要,但我们现在只需要看新的session就好。

大家如果想感受一下SwiftUI刚刚发布的时候大家的热情,可以看:

WWDC19 Keynote https://developer.apple.com/wwdc19/101 的2h6min34s - 2h14min22s

还有下面的视频,前二十分钟对新推出的SwiftUI也有详细的介绍,感兴趣的同学也可以看一下:

WWDC19 Platforms State of the Union https://developer.apple.com/wwdc19/103

〇 另外,如果想跟进苹果最新发布的技术,每年WWDCKeynotePlatforms State of the Union都可以关注一下,对设计和App开发感兴趣,每年的Apple Design Awards也可以进行关注;感兴趣的相关session也可以自己抽时间查看。

Stanford CS193p - Developing Apps for iOS

英文课程 Swift SwiftUI App设计思维

课程网址:https://cs193p.sites.stanford.edu

课程视频(YouTube English):https://youtube.com/playlist?list=PLpGHT1n4-mAsxuRxVPv7kj4-dQYoC3VVu

课程视频 中英字幕:https://www.bilibili.com/video/BV1fy4y1u7hX

课程清华云盘链接(包含 YouTube视频英文字幕 和 B站中英硬字幕搬运):https://cloud.tsinghua.edu.cn/d/bd289554fd0b4f9eb920/

非常系统性的Swift+SwiftUI教程!老师已经开了很多年的iOS开发课程了。暑期我们希望大家能完成前六课的学习(六节课的内容还是蛮多的哦,希望大家认真对待),更希望大家看完前六课之后也继续学习后面的课程。希望这门课程能让你入门iOS开发!

Basic

Lecture 1 Getting Started with SwiftUI

The first lecture jumps right into building the first application of the quarter: a card-matching game called Memorize. It will be the foundation for the first few weeks of course material.

Lecture 2 Learning More about SwiftUI

Development on Memorize continues. Creating reusable components (a Card in the game) and combining them to make more complex user-interfaces.

Lecture 3 MVVM

Conceptual overview of the architectural paradigm underlying the development of applications for iOS using SwiftUI (known as MVVM) and an explanation of a fundamental component of understanding the Swift programming language: its type system. Then both of these are applied to the Memorize application started in the first two lectures.

Lecture 4 More MVVM enum Optionals

The MVVM architecture is fully applied to Memorize. The important Swift concepts of enums and Optionals are covered and used to finish off the game logic of the Memorize game.

Lecture 5 Properties Layout @ViewBuilder

Explore property observers, computed properties, @State and @ViewBuilder. The mechanisms behind how Views are layed out on screen are examined followed by a demo which chooses a better font for each card in Memorize depending on the space available. Along the way, apply better access control to Memorize's internal API.

Lecture 6 Protocols Shapes

Discussion of what is perhaps the most important type in Swift: a protocol. The demo combines the concepts of generics and protocols to make the cards better use the space available on screen. Finally the Shape protocol is explained and the pie-shaped countdown timer is added to Memorize (but not yet animated).

Advanced

Lecture 7 ViewModifier Animation

Lecture 8 Animation Demo

Lecture 9 EmojiArt Drag/Drop

Lecture 10 Gestures

Lecture 11 Persistence Error Handling

Lecture 12 Binding Sheet Navigation EditMode

Lecture 13 Publisher More Persistence

Lecture 14 Document Architecture

浙江大学 - Swift创新导论

中文课程 Swift语法 UIKit 项目实战

链接:https://www.icourse163.org/course/ZJU-1450024180

前三周课程清华云盘链接:https://cloud.tsinghua.edu.cn/d/2ddcf31a51cf4a48b690/

前三周的教程可以让没有编程经验的同学对Swift这门编程语言、编程思维iOS应用开发有一个简单的了解。

后面的课程并不推荐大家学习,因为并没有使用Apple最新的SwiftUI框架进行教学;但是有一些很好的例子能够培养大家的创新思维,感兴趣的同学也可以看看后面几周中一些实际的案例。

第一周

第1讲:课程概述

第2讲:Swift浅析

第3讲:Swift编程基础知识

第4讲:移动应用设计流程

第5讲:iOS 人机交互基础

第6讲:iOS交互设计实践(一)

第7讲:iOS交互设计实践(二)

第8讲:常量、变量、函数

第9讲:数组与字典

第10讲:控制流(Control Flow)(一)

第11讲:控制流(Control Flow)(二)

第二周

第12讲:函数(Functions)和闭包(Closures)(一)

第13讲:函数(Functions)和闭包(Closures)(二)

第14讲:Playground 实践应用(一)

第15讲:Playground 实践应用(二)

第16讲:对象(Objects)和类(Classes)(一)

第三周

第17讲:对象(Objects)和类(Classes)(二)

第18讲:枚举(Enumeration)和结构(Structures)(一)

第19讲:枚举(Enumeration)和结构(Structures)(二)

第20讲:协议(Protocols)和拓展(Extensions)(一)

第21讲:协议(Protocols)和拓展(Extensions)(二)

第22讲:错误处理(Error handling)(一)

第23讲:错误处理(Error handling)(二)

Aimls - Swift编程基础

中文教程 Swift语法

Swift5.0语法讲解 链接:https://www.bilibili.com/video/BV144411C7Gg

Swift5.1新特性 SwiftUI初步了解:https://www.bilibili.com/video/BV1gJ411M72p

全部课程知识点整理总结:https://www.bilibili.com/video/BV1jE411y7cw

教程云盘链接:https://cloud.tsinghua.edu.cn/d/bba8530022af47de9e0b/

学习Swift编程语法的教程。Stanford的教程中也会教你如何使用Swift,但其中主要是靠你自学,可能会有些累。有编程基础的同学可以二倍速观看上面的Swift教程,对Swift有一个简单的理解。为什么要用二倍速呢?只要学过一门编程语言,学习其他编程语言就会特别快。推荐大家在学习过程中做好笔记

designcode - SwiftUI iOS

英文教程 较高质量的付费教程 不做要求 想提升的同学可以看(教程看得越多学到的东西越多)

教程清华云盘链接:https://cloud.tsinghua.edu.cn/d/65cd3bfc68844bd68356/

designcode.io

iOS Club - Markdown & Git

大家在学习的过程中可以使用Markdown来整理笔记。社团之前有Markdown的培训,已经上传至B站,不了解Markdown的同学可以进行查看。【教程】面向开发的Markdown学习

在之后的开发过程中,一件重要的事情是团队成员间的代码协作,社团之前也有过版本控制工具Git的相关培训,以后打算进行团队开发、还不了解版本控制的同学可以进行查看。【教程】Git基础与进阶

全部课程的清华云盘链接:https://cloud.tsinghua.edu.cn/d/01f70b980e8946c3a8b7/