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小标签
好无聊啊,不看了。后边的我都跳着看。