最近有IOS开发的需求,本来我是IOS小白,一点都不会的。 所以趁着有需求,照着b站的教程学了一下IOS开发的最新框架SwiftUI。
教程地址:教程传送门
本文不涉及swift语言的学习,因为语言只是框架的基础,我之前已经对swift有所了解。
这部教程是直接开发一个应用,在开发过程中介绍各种用法。
SwiftUI是什么
SwiftUI在苹果开发者官网上的介绍是这样说的:
用一句话说就是,SwiftUI是苹果目前最新的全平台应用程序开发框架。
我对SwiftUI的印象
其实本来我是打算学Flutter的,但是Flutter的配置过程相当繁琐,我配置了两天,终于还是被层出不穷的报错击溃了耐心,从而转向学IOS原生开发。
SwiftUI是2019年发布的,到现在不到两年的时间。当前最新版本是swiftUI 2,相比初版增加了很多控件,提供了更多方便实用的库。
苹果这次是把View层和Model层结合到了一起,即所谓的“所见皆所得”,比如这样:
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
上面的代码就创建了一个显示Hello,World的界面。
之前的IOS GUI框架我没学过,但是应该跟Android开发差不多的逻辑,界面是单独的文件,然后界面的后台逻辑也是单独的文件。
我之前学过一些Android开发的知识,从ConstraintLayout那种拖拽式的界面设计转到这种用纯代码构建界面还有点不适应,当然现在的SwiftUI开发也是支持拖拽的,但是苹果并不推荐这样做。
但是仔细一想,其实java的GUI程序的早期框架,比如awt,swing,也是用纯代码来构建界面的,后面才有的javaFX 这种拖拽式的GUI程序开发框架,可以想象,其实SwiftUI是利用Swift的现代语言特性,尤其是尾随闭包,对底层的控件进行更高维度的封装,来达到简单易懂,语法自然的目的。有点返璞归真的感觉(强行解释🙈)
SwiftUI在理念上,跟Flutter是有些不谋而合的,都是组件可以分拆和组装,编辑器提供的功能,也都可以非常方便的拆分组件。而且很微妙的是,Android的jetpack也发布了一个Compose组件,我简单的看了看,理念上也是跟SwiftUI,Flutter类似的(也不知道到底谁抄谁的🌚)。因为Kotlin语言和Swift语言在语法上有很多相似之处,可预见的是,移动端开发的学习难度正在降低,开发者开发移动端应用的难度也会有所降低。
SwiftUI和Flutter在编写代码的风格上的不同之处在于,Flutter使用的是Dart语言编写,没有尾随闭包这个语言特性,所以只能显式的将子控件用child或者children在控件的构造器中声明出来,而且因为Flutter没有自己专用的IDE,需要借助Android Studio,VS Code,Idea来开发,所有写界面的时候并不能随时查看界面到底什么样子,要切换到模拟器或者Instant run来刷新应用,所以效率不及SwiftUI。
而SwiftUI使用苹果自家IDE Xcode,能够提供实时刷新的功能,甚至动态响应,这一点是Flutter望尘莫及的。虽然如今Android studio 4.1已经能够将模拟器以侧边栏的形式内嵌在IDE中,但是Flutter的发开体验总体还是不及SwiftUI的。
SwiftUI有一点我是非常不爽的,那就是代码不能折叠,尾随闭包一旦嵌套层数过多,就显得很混乱。在这一点上,Flutter的开发体验是要强于SwiftUI的,Flutter不仅能折叠代码,还会强制在括号的最后面添加上当前括号的范围,
真不知道是不是苹果要强迫开发者拆分组件,还是纯粹的没有开发这个功能。
从我开始接触编程到现在,总体的印象是应用创建的越来越复杂了。比如说刚开始创建一个登录界面,就只有一个xml和MainActivity,随着应用底层架构从MVC迁移到MVVM,现在创建一个登录界面,林林总总一大堆文件就创建出来了,乍一接触这一套理念,光捋顺里面关系就得花上几天时间,又是DataSource,又是Repository,又是LiveData,ViewModel,而涉及到的功能也就只有一个登录操作而已。
上面这十个文件只为了登录这一个操作,而加上布局,总共就11个文件了。
希望更新的框架能简化现在日趋复杂的开发的流程。
IDE的简单了解
工欲善其事,必先利其器。熟练使用IDE能使开发事半功倍。
设备型号 | 系统版本号 | Xcode版本号 |
---|---|---|
Mac Pro | big sur | 12.2 |
Xcode新建一个IOS工程:
选择App后点Next(看了网上的教程进行汉化,但是失败了,一般来说Xcode支持原生中文界面很麻烦):
最上面的Product Name填写项目名称,不多说。
第二行的Team选择一个开发者团队,个人或者企业团队,这项设置在后面的开发中是可以随时更改的。
后面的两个Identifier,我的理解是设置一个标识符,用来和其他应用进行区分。
Interface是指交互界面构建要用到的技术手段,这里可选项有SwiftUI,和StoryBoard,这里选择SwiftUI。
再xcode11中,其实即使选择了SwiftUI,创建完成项目之后,项目里面依然是包含了StoryBoard文件的,
而到了xcode12中,创建swiftUI应用已经不再包含Storyboard,甚至AppDelegate文件,本来这两个文件在SwiftUI框架中的地位就是略显多余的,所以可以推测,其实去年的SwiftUI还是beta版本,只不过苹果脸皮厚,硬是把Beta版直接release,今年的SwiftUI 2才是完全体。
Life Cycle这个命名挺熟悉的,Android的MVVM架构理念里面也是包含着Lifecycle的。按照字面意思来看就是指选择App的生命周期的管理方式。这里可选项是SwiftUI App和 UIKit,这里当然选择SwiftUI App。
最后的Language这里只能选择Swift,因为SwiftUI只能用Swift来编写,而不能用OC,如果前面的Interface选择了storyboard,则这个语言栏可以选择OC。
后面的复选框选择是否使用Core Data,这是苹果最新的本地持久化存储框架,类似于Android放弃SharedPreference最新推出的Jetpack DataStore。苹果之前使用的是UserDefault,存储数据的方法也和Android中的sharedPreference类似。
填写项目名字之后,选择一个位置保存项目,然后就来到了IDE的主界面:
左边这一栏能显示的内容是很多的,具体显示的内容取决于左上角这一排功能键:
他们依次是:
- Project Navigator(项目目录)
- Source Control Navigator(版本控制)
- Symbol Navigator(属性总览)
- Find Navigator(查找)
- Issue Navigator(报警界面)
- Test Navigator(测试)
- Debug Navigator(调试)
- Breakpoint Navigator(断点)
- Report Navigator
上面的设备列表点击一下,会显示出当前可用的设备,如果是真机,会列在最上面,真机下面的都是模拟器。程序运行后,如果选择的模拟器,则会自动启动模拟器程序,而无需手动启动。
右边的预览框一般不会自动启动,要手动点一下预览框右上角的Resume,然后就能够实时预览左边编辑器Swift代码编写的界面。点击坐上的三角形开始图标,可以让这个预览界面变成动态的,实时响应各种输入,如果不点这个图标,则预览仅仅显示当前Preview类对应的界面。
最右边的属性栏其实不太用得到,可以点击右上角的按键将其隐藏:
当然最左边的项目目录也可以用同样方法隐藏。
Xcode里面,Console界面是不会自动显示出来的,用快捷键shift + command + c可以调出Console:
应用的开发从下篇开始。