SwiftUI自学成长笔记
  • 推荐0
  • 收藏0
  • 浏览173

SwiftUI自学成长笔记

刘铭 (作者) 

  • 书  号:978-7-121-41822-8
  • 出版日期:2021-09-26
  • 页  数:450
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥99.00
本书是以实战为基础的iOS应用程序开发教程,以项目实战的方式教会读者如何运用全新的Xcode 12和SwiftUI 2.0框架开发商业级别的iOS和iPadOS应用程序。SwiftUI框架是苹果公司于2019年推出的全新用户界面框架,阅读本书的读者需要具备Swift程序设计语言基础。本书结合了8个应用程序案例,让读者在模仿和学习的过程中快速地找到实战的感觉。本书内容翔实、结构清晰、循序渐进,将基础知识与案例实战紧密结合,既可作为iOS初学者的入门教材,也适合中高级用户进一步学习新技术。
通过详实的步骤讲解,全面了解如何使用SwiftUI框架方便快捷的开发应用程序。
前言


坦白地说,在苹果公司2017年和2018年的全球开发者大会(WWDC)上,我并没有看到任何惊喜,每次的WWDC似乎只是对前一个版本的Swift语言进行程式化的升级。但是在2019年的WWDC上,苹果公司发布了基于Swift语言建立的声明式框架——SwiftUI,它可以用于iOS、iPadOS、watchOS、tvOS和macOS等苹果公司旗下所有主流平台的应用程序开发。毫无疑问,对于具有iOS开发经验或学习iOS应用程序开发的人来说,SwiftUI是近年来iOS应用程序开发中最为重大的改变。
我从事iOS程序开发和相关的教学工作已有十多年的时间,已经习惯使用UIKit框架搭建用户界面。通过混合使用故事板(Storyboard)和Swift代码来构建用户界面,曾经是非常流行和普遍的布局方式。但是,无论你是喜欢使用Interface Builder在故事板中以可视化的方式创建用户界面,还是喜欢完全使用Swift代码创建用户界面,它们最终都会依赖UIKit框架实现。可能你会有这样一个疑虑:我为什么非要使用SwiftUI框架而抛弃之前的UIKit框架来搭建用户界面呢?原因有以下三点。
1.新技术必须掌握
SwiftUI是苹果公司于2019年推出的界面布局框架,目的就是取代之前的UIKit框架,从而实现更高效的界面搭建,以适应现在及将来可能推出的更多规格和型号的苹果产品。
诚然,SwiftUI目前依然有很多不足之处,如果你是使用UIKit框架的高手,那么利用SwiftUI搭建界面的确需要花费更多的学习成本。但这就和从Objective-C过渡到Swift一样,需要一个过程,一旦走过去,你就会发现前方的路“异常平坦”,且“风景如画”。
2.新的框架带来新的设计思路
SwiftUI类似于MVVM架构,它比之前应用程序开发的MVC架构更先进,更便于代码的维护,设计思路更清晰。
3.执行效率高,更新迭代快
其实,在iOS开发的过程中,最耗费时间的并不是代码逻辑,而是对用户界面的处理。SwiftUI框架可以给你更快速的迭代和测试体验,帮你更快捷地实现你想要的功能。
对于我来说,SwiftUI不仅是一个全新的框架,而且从根本上改变了在iOS或其他苹果系统平台上创建用户界面的方法。苹果系统不再使用命令式的编程风格,而是提倡使用声明式、函数式的编程风格;不是确切指定用户界面控件的布局和功能,而是专注于描述在构建用户界面时需要哪些控件,以及通过声明式编程指明需要执行哪些操作。
2020年,苹果公司将更多的功能和用户界面控件添加到了Xcode 12的SwiftUI框架中,并将设计提升到了一个更高的水准。与之前的UIKit相比,我们可以使用更少的代码来开发精美的动画效果。
利用SwiftUI设计用户界面并不是要求你马上放弃使用Interface Builder和UIKit框架,但是,SwiftUI代表了苹果系统各个平台上应用程序开发的未来。为了能够始终站在技术创新的最前沿,推荐你从现在开始使用这种新的界面开发方式。
希望本书能够帮助你使用SwiftUI框架开发并构建一些令人惊叹的应用程序。
本书共8章。第1章带领读者制作一个简单的卡片应用程序,了解利用SwiftUI实现界面布局的基础知识。第2章利用结合北京的地域特色,使用Tab View和滚动视图制作一个介绍北京美食和胡同的应用程序。第3章制作的“蔬菜百科全书”应用程序涉及导航视图、自定义按钮外观和使用微动画效果提升用户体验。第4章将带领读者制作一个介绍中国十大名胜古迹的应用程序,其中会使用到MapKit框架呈现地图。第5章通过购物应用程序“爱上写字”介绍如何在程序中利用网格视图进行布局并创建自定义形状。第6章带领读者制作“奇妙水果机”游戏程序,了解游戏设计的基本原理,并使用User Defaults将游戏数据存储到本地。第7章会制作一款Todo类应用程序,介绍如何使用Core Data将数据存储到数据库之中,并由用户自定义应用程序的主题颜色。第8章通过制作卡片选择应用程序,让读者了解如何在SwiftUI中实现滑动手势。
致谢
感谢伟大到可以改变这个世界的史蒂夫·乔布斯,他的精神对我产生了非常大的影响。感谢刘颖、刘怀羽、张燕,以及我身边的同事们,感谢你们对我的支持与帮助,并时时刻刻给我信心和力量。
谨以此书献给我最亲爱的家人,以及众多热爱iOS开发的朋友们!


刘铭
2021年7月

目录

目录


第1章 我的第一个iOS应用程序 1
1.1 使用Xcode快速创建项目 1
1.1.1 为项目添加程序图标和相关图片素材 3
1.1.2 为项目添加预定义颜色 5
1.1.3 为项目添加图片素材 7
1.2 创建启动画面 9
1.3 创建卡片视图布局 10
1.3.1 创建CardView 10
1.3.2 创建线性渐变色背景 14
1.3.3 为CardView添加图像和文本 15
1.3.4 为CardView添加按钮 17
1.4 循环生成多张卡片视图 21
1.5 为卡片创建数据模型 22
1.5.1 创建卡片数据模型 23
1.5.2 为静态数据创建数组 24
1.5.3 在卡片中显示数据信息 24
1.6 在应用程序中播放声音 28
1.7 创建动画效果 29
1.7.1 为卡片人物创建淡入动画 29
1.7.2 为标题创建下滑入动画效果 31
1.7.3 为按钮创建上滑入动画效果 31
1.8 为应用程序添加触控反馈效果 33
1.9 呈现警告对话框 34
1.10 为应用程序创建iMessage贴图 36
第2章 这里是北京 40
2.1 使用Xcode创建项目 40
2.1.1 为项目添加程序图标和相关图片素材 41
2.1.2 为项目添加适配颜色集和图像集 42
2.2 创建支持浅色和深色模式的启动画面 46
2.2.1 创建Launch Screen故事板 46
2.2.2 设计Launch Screen用户界面 48
2.2.3 在项目中设置启动画面 51
2.3 创建Tab View导航 52
2.3.1 创建4个场景视图 53
2.3.2 创建Tab View 54
2.4 创建北京简介视图 55
2.4.1 创建简介视图 55
2.4.2 为简介视图添加动画效果 58
2.5 创建小吃视图页面 59
2.5.1 设计横幅视图布局 59
2.5.2 创建横幅滚动视图 62
2.5.3 获取HeaderView所需的静态数据 63
2.5.4 创建灵活的表格式布局 65
2.5.5 创建横幅滚动视图 71
2.5.6 创建特色小吃店卡片视图 75
2.5.7 创建小吃店详细页面视图 82
2.5.8 使用Sheet修饰器呈现新的视图 87
2.6 创建胡同视图页面 89
2.7 使用SwiftUI设计表单 95
第3章 蔬菜百科全书 100
3.1 使用Xcode快速创建项目 100
3.1.1 设置iOS设备的屏幕允许方向 101
3.1.2 为项目添加程序图标和蔬菜图片 102
3.1.3 为项目添加颜色集 104
3.1.4 在模拟器中查看效果 106
3.2 利用Page Tab View创建引导画面 106
3.2.1 整理项目文件的结构 107
3.2.2 创建可复用的蔬菜卡片视图 107
3.2.3 创建自定义外观按钮 111
3.2.4 为蔬菜卡片增加动画效果 113
3.2.5 创建蔬菜卡片分页视图 114
3.3 创建数据模型和获取数据 116
3.3.1 创建数据模型 116
3.3.2 创建蔬菜数据 117
3.3.3 在蔬菜卡片中显示蔬菜数据 117
3.3.4 在引导页面中显示蔬菜数据 119
3.4 使用AppStorage封装器存储数据 120
3.4.1 SwiftUI中应用程序的生存期 121
3.4.2 完成按钮的执行代码 124
3.5 通过循环创建列表视图 125
3.5.1 创建行视图 125
3.5.2 创建列表视图 128
3.5.3 设置导航视图的属性 130
3.6 创建蔬菜的详情视图 130
3.6.1 创建视图文件 130
3.6.2 添加导航链接 131
3.6.3 设计详情页面视图 132
3.6.4 创建独立的蔬菜图片视图 135
3.6.5 在详情页面中调用蔬菜图片视图 137
3.6.6 创建链接视图 139
3.6.7 创建蔬菜分类视图 141
3.6.8 Disclosure Group的使用 141
3.7 创建App的设置页面 144
3.7.1 创建SettingsView 145
3.7.2 为设置视图添加关闭功能 146
3.7.3 为列表视图添加开启设置页面功能 147
3.7.4 完善设置页面的第一部分功能 148
3.7.5 实现设置页面的第三部分功能 150
3.7.6 实现设置页面的第二部分功能 154
第4章 名胜古迹App 158
4.1 使用Xcode创建名胜古迹项目 158
4.1.1 添加图片和视频素材 159
4.1.2 添加JSON格式的数据文件 161
4.1.3 设置程序的启动画面 162
4.1.4 创建TabView 163
4.2 解析JSON格式文件并获取相应数据 165
4.2.1 横幅封面视图 165
4.2.2 JSON相关知识 166
4.2.3 解析JSON数据 168
4.2.4 使用JSON数据生成封面图片 170
4.3 利用Swift范式创建SwiftUI列表 172
4.3.1 设计浏览页面列表视图的行布局 172
4.3.2 创建数据模型 174
4.3.3 Swift的范式 174
4.3.4 实现动态数据行信息的设置 175
4.4 创建名胜古迹的详细视图 177
4.4.1 初步创建详细视图 178
4.4.2 设计横幅图片、标题和提要 180
4.4.3 创建可复用的Heading视图 181
4.4.4 创建画册视图 183
4.4.5 使用NavigationLink创建链接 185
4.4.6 创建相关信息视图 186
4.4.7 创建地图视图 188
4.4.8 创建链接组件 192
4.5 创建视频播放视图 194
4.5.1 创建数据模型和行视图 194
4.5.2 生成列表视图 197
4.5.3 触控反馈 200
4.5.4 创建视频播放页面 201
4.5.5 视频播放页面的附加设置 204
4.5.6 为视频浏览页面添加链接 206
4.6 创建带有标注的复杂地图 207
4.6.1 创建数据模型 207
4.6.2 创建复杂地图 207
4.6.3 自定义标注 210
4.6.4 为视图添加细节素材 213
4.7 创建运动动画 216
4.8 创建照片视图 222
4.8.1 创建基本的网格视图 222
4.8.2 实现照片视图的基本功能 225
4.8.3 实现照片视图的滑动条功能 226
4.8.4 对网格视图的改进 228
4.9 创建复杂的网格视图布局 229
4.9.1 工具栏的设置 230
4.9.2 利用Group实现模式切换 231
4.9.3 实现网格视图的基本功能 233
4.9.4 实现网格视图的列数动态变换效果 235
4.10 创建iMessage扩展功能 238
4.11 将应用程序适配到iPadOS和macOS平台 241
4.11.1 创建App的关于面板 241
4.11.2 自定义修饰器 242
4.11.3 将项目迁移到macOS平台 244
第5章 爱上写字 247
5.1 使用Xcode创建项目 247
5.1.1 为项目添加程序图标和相关图片素材 248
5.1.2 为项目添加启动画面 249
5.1.3 整理项目文件架构 250
5.1.4 创建FooterView 251
5.1.5 快速输入自定义代码块 253
5.2 创建自定义导航栏 254
5.2.1 创建导航栏视图 255
5.2.2 设计导航栏中的Logo视图 256
5.2.3 为主场景视图添加导航栏 257
5.3 创建图像滑动视图 260
5.3.1 创建数据模型 260
5.3.2 创建JSON解析方法 261
5.3.3 创建用于滑动的图像视图 261
5.3.4 将图像滑动视图添加到主场景视图 263
5.4 为文具分类创建网格布局视图 264
5.4.1 创建文具分类数据模型 264
5.4.2 创建文具分类子视图 265
5.4.3 创建文具分类网格视图 267
5.4.4 为网格视图创建Header和Footer视图 268
5.5 为商品创建网格布局视图 270
5.5.1 创建可复用的标题组件 270
5.5.2 创建商品的数据模型 272
5.5.3 创建商品子视图 272
5.5.4 创建商品网格视图 274
5.6 创建品牌网格布局视图 275
5.6.1 创建品牌的数据模型 275
5.6.2 创建品牌子视图 276
5.6.3 创建品牌网格视图 277
5.7 创建商品详细页面视图 278
5.7.1 创建产品详细页面视图 278
5.7.2 创建详细页面导航栏 279
5.7.3 创建Header视图 280
5.7.4 创建详细页面的上半部分视图 281
5.7.5 创建详细页面的商品描述视图 283
5.7.6 创建自定义形状 284
5.7.7 创建评星和笔尖规格视图 287
5.7.8 创建数量和“设为最爱”视图 290
5.7.9 创建添加到购物车视图 291
5.8 完成最后的设置 293
5.8.1 创建Shop类 293
5.8.2 在ContentView类中添加Shop实例 294
5.8.3 实现返回按钮的功能 295
5.8.4 完善详细页面视图功能 297
5.8.5 添加触控反馈特性 299
第6章 奇妙水果机 302
6.1 使用Xcode创建项目 302
6.1.1 为项目添加程序图标和相关图片素材 303
6.1.2 为项目添加启动画面 304
6.2 创建Header视图 305
6.2.1 创建场景页面代码架构 305
6.2.2 单独创建Logo视图 307
6.2.3 添加重置和相关信息按钮 308
6.2.4 创建记分牌视图 310
6.3 创建游戏主界面 314
6.3.1 设计水果机的槽位视图 314
6.3.2 搭建游戏主界面视图 316
6.4 添加Footer视图 318
6.4.1 创建Footer界面 318
6.4.2 重构Footer视图的代码 320
6.5 创建游戏信息视图页面 323
6.5.1 创建信息视图 323
6.5.2 实现关闭信息页面功能 327
6.6 编写游戏逻辑代码 329
6.6.1 实现随机生成槽位水果的逻辑 329
6.6.2 实现判断输赢的逻辑 331
6.6.3 实现玩家选择游戏分值的功能 333
6.6.4 创建游戏结束时的自定义窗口 335
6.7 利用User Defaults存储和获取数据 341
6.8 为游戏添加动画效果 342
6.9 为游戏添加声效和背景音乐 346
第7章 TODO应用程序 350
7.1 使用Xcode创建项目 350
7.1.1 创建Todo项目 350
7.1.2 创建添加待办事项视图页面 353
7.2 了解Core Data特性 357
7.2.1 Core Data简介 357
7.2.2 为项目创建实例 358
7.2.3 Core Date的工作方式 359
7.2.4 为页面添加managedObjectContext 361
7.2.5 改善AddTodoView的用户体验 364
7.2.6 显示待办事项数据信息 365
7.2.7 删除和更新数据记录 367
7.3 显示随机视图 369
7.3.1 创建EmptyListView页面 369
7.3.2 为视图添加微动画 373
7.3.3 显示随机内容 374
7.4 改进表单的外观 375
7.4.1 改进AddTodoView的外观 375
7.4.2 改进ContentView的外观 377
7.5 创建设置视图页面 381
7.5.1 创建设置视图页面 381
7.5.2 创建表单静态行视图 382
7.5.3 创建可链接的静态行视图 384
7.6 创建可切换应用程序图标功能 388
7.6.1 添加并设置可替换图标 388
7.6.2 从配置文件中获取可替换图标信息 391
7.6.3 生成应用程序图标选择器 393
7.7 为应用程序创建颜色主题 398
7.7.1 创建颜色主题相关文件和文件夹 398
7.7.2 在SettingsView页面中添加切换颜色主题功能 399
7.7.3 更新用户界面 402
7.7.4 完成设计上的最后改进 404
第8章 InYourHeart应用程序 406
8.1 使用Xcode创建项目 406
8.2 创建卡片视图 409
8.2.1 创建卡片视图的数据模型 409
8.2.2 创建卡片视图 410
8.3 创建Header和Footer视图 413
8.3.1 创建HeaderView页面 413
8.3.2 创建Footer视图页面 415
8.4 创建可复用组件 416
8.5 创建指南视图页面 419
8.6 利用Binding实现视图之间的数据交换 421
8.6.1 Binding封装属性 422
8.6.2 使用环境对象关闭视图 424
8.6.3 生成信息导览页面视图 426
8.6.4 实现InfoView的呈现和关闭 432
8.7 创建照片卡牌 434
8.7.1 创建照片卡牌 434
8.7.2 对照片卡牌的改进 436
8.7.3 实现左右滑动手势 437
8.7.4 显示喜爱或不喜爱的图标 442
8.8 移除和添加照片卡牌 444

读者评论