swiftui hello

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

IMG_0213

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

image-20240111上午111057868

image-20240111上午111126455

1. Getting Started with SwiftUI

Xcode变化比任何教程都要快,还是要习惯。

image-20240110下午42025890

image-20240110下午35444034

函数式编程。

image-20240110下午40824158

教授观点,我表达不一定准确。函数式编程,面向协议protocol的编程。函数式编程是行为的封装,面向对象是数据封装。

怎么这么像vue? computed property。Body就是个computed属性?:

image-20240110下午41317948

我觉得vstack有点像 html 里的table,或者div。

卧槽,Apple又搞这种语法糖,或者说函数式编程怎么老是搞这种恶心人的语法糖:

image-20240110下午45652547

实际上 VStack有很多参数,content只是其中之一。

啊,真的挺像 css的感觉,可以嵌套配置这样子:

image-20240110下午51245623

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

image-20240110下午53014557

image-20240110下午53746955

在reference里查一下方法:

image-20240110下午54820889

2. more SwiftUI

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

image-20240110下午54227284

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

image-20240110下午55153235

swift是强类型语言。

debug console

image-20240110下午55933983

介绍一下 @state

image-20240110下午60807742

加了一个常量 content:

image-20240110下午63204032

数组故意搞一个越界:

image-20240110下午63406335

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

image-20240110下午63519934

array

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

image-20240110下午63718259

介绍 forEach 循环了:

image-20240110下午64715681

image-20240111上午85301547

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

image-20240111上午85816320

继续前端即视感:

image-20240111上午85854600

加了一个空格spacer

image-20240111上午90339083

拖拽增加元素:

image-20240111上午90749199

加了两个图标:

image-20240111上午93627604

精简代码:

image-20240111上午93938200

image-20240111上午94320399

implicit return

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

image-20240111上午94111069

换一种方式实现function,更加精简

继续吐槽,函数式编程都是这样吗?继续既视感。

image-20240111上午95059915

加一个边界判断:

image-20240111上午95141462

LazyVgrid

image-20240111上午95353973

自适应:

image-20240111上午95441251

透明度

image-20240111上午95624496

ScrollView

image-20240111上午95659581

3. MVVM

image-20240111上午111605722

image-20240111上午111851463

image-20240111上午111927250

image-20240111上午112132083

struct 和 class区别

image-20240111上午112242385

image-20240111上午112958957

泛型

image-20240111上午115208710

image-20240111上午115308308

泛型+协议=很强大

image-20240111下午120741038

协议

image-20240111下午120929133

image-20240111下午121123581

image-20240111下午121151062

image-20240111下午121233112

functions as types

万恶的箭头表达式

image-20240111下午121407742

image-20240111下午121605832

闭包

image-20240111下午121811173

新增游戏逻辑

image-20240111下午122249054

新增文件

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

image-20240111下午11522288

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

image-20240111下午11845625

4. Applying MVVM

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

image-20240111下午31202039

image-20240111下午31222004

image-20240111下午31241135

for in 循环

image-20240111下午31721865

image-20240111下午32138949

image-20240111下午32525480

可以用全局函数:

image-20240111下午32902892

也可以用闭包,可怕的记忆在攻击我:

先拷贝整个方法过来替换:

image-20240111下午33110728

闭包记忆

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

image-20240111下午33232325

来了,死亡记忆:

image-20240111下午34547769

image-20240111下午34616083

image-20240111下午34635347

image-20240111下午34653489

image-20240111下午34728067

image-20240111下午34838731

class 属性初始化

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

image-20240111下午35012957

设置成静态ok

image-20240111下午35117110

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

image-20240111下午35227935

除非设置成静态的。

告一段落:

image-20240111下午40013272

一些xcode简单操作

方法重命名,把无语义的contentView改个名字成xxxView

image-20240111下午40400065

viewmodel 控制 view

image-20240111下午41152983

image-20240111下午41108038

view的model数据初始化:

image-20240111下午41415699

更改图标大小:

image-20240111下午41641706

image-20240111下午41705181

又来了,vue记忆:

image-20240111下午42041153

打印个东西:

image-20240111下午42343892

回忆一下:

  • MemoryGame是struct,是Model,
  • emojimemoryGame是class,是viewmodel
  • emojiMemoryGameView是view
  • MemorizeApp是应用入口

首先声明viewmodel是observableObject,把相关变量设置成@Public

image-20240111下午43421262

然后View声明model是 ObservedObject:

image-20240111下午42554795

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

image-20240111下午42716599

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

5. Protocols,Enum,Optional

image-20240111下午44015442

用动画引出protocol:

image-20240111下午44808148

model中重载=方法

image-20240111下午45355309

在struct 还要声明 equatable

image-20240111下午45456301

还能这样声明精简?

image-20240111下午45633901

foreach

image-20240111下午51723751

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

image-20240111下午52011229

优化debug打印

image-20240111下午52217693

fixme小标签

image-20240111下午52701346

好无聊啊,不看了。后边的我都跳着看。

6. Layout @ViewBuilder

image-20240111下午53526221

image-20240111下午53552340

image-20240111下午53637347

image-20240111下午53707452

image-20240111下午53731016

image-20240111下午53816723

image-20240111下午53858937

image-20240111下午53938529

image-20240111下午54107698

7. Shape, VIewModifier,Constants

image-20240111下午54233306

image-20240111下午54322348

image-20240111下午54409520

image-20240111下午54454196

8. animation

image-20240111下午54746660

10. Emoji Art

image-20240111下午54711147

image-20240111下午65530086

image-20240111下午65552143

11. Gestures, 2nd MVVM

image-20240111下午65750246

12. Persistence

image-20240111下午65922300

image-20240111下午65946520

image-20240111下午70130843

13. Presenting Views, Navigation

14. Multithreading, error handling

image-20240111下午70937738

image-20240111下午71010297

image-20240111下午71049633

image-20240111下午71642930

image-20240111下午71705534

image-20240111下午71736500

image-20240111下午71807642

image-20240111下午71833048

image-20240111下午71919713

Error Handling

image-20240111下午71942946

image-20240111下午72004692

15. Document Architecture

image-20240111下午72257438

image-20240111下午72452586

image-20240111下午72526595

image-20240111下午72544143

image-20240111下午72556806

image-20240111下午72612325

image-20240111下午72749011

image-20240111下午72829682

image-20240111下午72850183

image-20240111下午72905723

image-20240111下午72929515

image-20240111下午72943206

image-20240111下午72958678

image-20240111下午73127261


使用 osascript 命令将 Mac 应用切换到前台 xcode vim mode