swiftui hello
2024-01-10 tech mac apple-developer 5 mins 141 图 2033 字

弹幕草稿记录中。来自斯坦福大学iOS开发课程2023。

我觉得认真看完MVVM+protocol的内容就可以了,后续的需要的内容再跳着看。


1. Getting Started with SwiftUI
Xcode变化比任何教程都要快,还是要习惯。


函数式编程。

教授观点,我表达不一定准确。函数式编程,面向协议protocol的编程。函数式编程是行为的封装,面向对象是数据封装。
怎么这么像vue? computed property。Body就是个computed属性?:

我觉得vstack有点像 html 里的table,或者div。
卧槽,Apple又搞这种语法糖,或者说函数式编程怎么老是搞这种恶心人的语法糖:

实际上 VStack有很多参数,content只是其中之一。
啊,真的挺像 css的感觉,可以嵌套配置这样子:

一个function 不超过20行,确实有点难蛤。不过函数式编程我觉得可以做到。。。毕竟到处是函数。


在reference里查一下方法:

2. more SwiftUI
这个错误,要把 Text 改成 some View 这种描述才可以:

加了个参数,另外变量只能声明、赋值,不能计算哈,不在compute方法里。

swift是强类型语言。
debug console

介绍一下 @state

加了一个常量 content:

数组故意搞一个越界:

得了,我觉得这跟前端没啥区别了,即视感极其强烈。

array
又是语法糖,不过比较符合直觉:

介绍 forEach 循环了:


故意做了一个错误,看看能不能找到:

继续前端即视感:

加了一个空格spacer

拖拽增加元素:

加了两个图标:

精简代码:


implicit return
只有一行代码的方法,不需要写return,这叫隐式return。

换一种方式实现function,更加精简
继续吐槽,函数式编程都是这样吗?继续既视感。

加一个边界判断:

LazyVgrid

自适应:

透明度

ScrollView

3. MVVM





struct 和 class区别


泛型


泛型+协议=很强大

协议




functions as types
万恶的箭头表达式


闭包

新增游戏逻辑

新增文件
第一个文件是Model,用的struct,注意是 import Foundation, struct名和返回值都自定义了。

第二个文件,要写view model,所以import SwiftUI。另外定义成class,如果有父类和protocol要父类在前:

4. Applying MVVM
给 struct 初始化,其实不初始化也行。反正struct本来就会自动初始化。也可以用以下三种方式:



for in 循环



可以用全局函数:

也可以用闭包,可怕的记忆在攻击我:
先拷贝整个方法过来替换:

闭包记忆
格式显然不太对,把{} 括起来,闭包不能有key参数,所以把 forPairAtIndex去了。

来了,死亡记忆:






class 属性初始化
我们不能用一个属性初始化另一个,因为初始化属性是随机的,没有前后之分。

设置成静态ok

另外也不能用方法初始化类:

除非设置成静态的。
告一段落:

一些xcode简单操作
方法重命名,把无语义的contentView改个名字成xxxView

viewmodel 控制 view


view的model数据初始化:

更改图标大小:


又来了,vue记忆:

打印个东西:

回忆一下:
- MemoryGame是struct,是Model,
- emojimemoryGame是class,是viewmodel
- emojiMemoryGameView是view
- MemorizeApp是应用入口
首先声明viewmodel是observableObject,把相关变量设置成@Public

然后View声明model是 ObservedObject:

在APP里也要改,加上 @stateObject声明:

因为既视感太强了,我突然有一种不好的预感,mvvm不是必然存在数据流向的问题?vue前端是用外置存储这种类型的东西把状态存起来,iOS呢?这个教程应该不会涉及到吧?
5. Protocols,Enum,Optional

用动画引出protocol:

model中重载=方法

在struct 还要声明 equatable

还能这样声明精简?

foreach

这段不是很明白,不过也行了。注意是在model里修改的。

优化debug打印

fixme小标签

好无聊啊,不看了。后边的我都跳着看。
6. Layout @ViewBuilder









7. Shape, VIewModifier,Constants




8. animation

10. Emoji Art



11. Gestures, 2nd MVVM

12. Persistence



13. Presenting Views, Navigation
14. Multithreading, error handling









Error Handling


15. Document Architecture













