IOS开发之SwiftUI学习笔记(一)

最近有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 Probig sur12.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的主界面:
在这里插入图片描述
左边这一栏能显示的内容是很多的,具体显示的内容取决于左上角这一排功能键:
在这里插入图片描述
他们依次是:

  1. Project Navigator(项目目录)
  2. Source Control Navigator(版本控制)
  3. Symbol Navigator(属性总览)
  4. Find Navigator(查找)
  5. Issue Navigator(报警界面)
  6. Test Navigator(测试)
  7. Debug Navigator(调试)
  8. Breakpoint Navigator(断点)
  9. Report Navigator

上面的设备列表点击一下,会显示出当前可用的设备,如果是真机,会列在最上面,真机下面的都是模拟器。程序运行后,如果选择的模拟器,则会自动启动模拟器程序,而无需手动启动。
在这里插入图片描述
右边的预览框一般不会自动启动,要手动点一下预览框右上角的Resume,然后就能够实时预览左边编辑器Swift代码编写的界面。点击坐上的三角形开始图标,可以让这个预览界面变成动态的,实时响应各种输入,如果不点这个图标,则预览仅仅显示当前Preview类对应的界面。
在这里插入图片描述
最右边的属性栏其实不太用得到,可以点击右上角的按键将其隐藏:
在这里插入图片描述
在这里插入图片描述
当然最左边的项目目录也可以用同样方法隐藏。
Xcode里面,Console界面是不会自动显示出来的,用快捷键shift + command + c可以调出Console:
在这里插入图片描述
应用的开发从下篇开始。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值