置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
“不积跬步,无以至千里;不积小流,无以成江海”
继续
截止本文,【SwiftUI入门】系列已经有16篇文章,通过这段时间的学习,深刻地感受到 SwiftUI
这门技术与我之前已有的 web
知识体系的不同,其中最大的区别在于完整的强类型与声明式编程两个部分。
当然除了不同之外,也有很多相似的地方,例如对函数式编程的支持,函数可以作为一个参数到处传递,当然也可以作为一个 View
来使用。
我一向认为,一门语言或者技术既然能流行,自然有他独特的场景,或者其独特的思维逻辑。
并且,很有可能当你学一门新的技术时,他的逻辑体系是与你已有的知识体系是相悖的或者是螺旋交叉的。
当两种知识体系碰撞时,有的人会执着于争个对错搞下,但是实际上这种碰撞才是最佳的进步机遇。
暴露自己的不足的同时,也在补全、扩张自己的知识体系。
同样的在本次 SwiftUI入门
的学习中我也遇到了很多思维的碰撞与思考,现将部分总结如下。
完整的强类型
我之前的常用编程语言是JavaScript(Vue、React)
、PHP(laravel)
,其他的诸如golang
、Java
、Python
、VBA
、Dart
、C#
等语言并不常用,仅在需要的场景才会搬出这些技能来。
JavaScript
与 PHP
同有一个特点就是弱类型,当然 JavaScript
有 TypeScript
这种超集语言,PHP
自8.0开始也开始支持强类型,但是从我的实际使用中,这两者的强类型支持并不完美。
TypeScript
为了兼容弱类型的 JavaScript
已经实现的库,实际上做了一些妥协,有些库需要引入 @types/xxx
类型库才能正常使用,当然这不是什么问题,毕竟不可能所有的库都重新来过。
PHP
至今都不支持在定义普通变量时添加类型限制,只有在定义类属性的时候才允许限定类型。也许以后会添加这个支持也说不定。
在学习SwiftUI的时候,从头到尾都是强类型,所有的东西包括最基础的类型和视图结构体,都可以 command+点击
跳转定义、option + 点击
查看示例,虽然一开始的时候有点不舒服,但是用久了越发地感觉合理。很多东西可以直接点击进去看看官方和包的定义来学习。
虽然其他的强类型语言如 Java、golang
等也有这样的全类型定义,但是感觉在编辑器和语法糖的玩法上比 Xcode
稍逊一筹,感觉上比较接近的就是 C#
了,或许一门好玩儿的语言还得是有一个好的配套编辑器?😂
声明式视图
除了强类型带来的差异感之外,还有一个差别就是声明式视图的不一样,在以往的 Vue
开发中,都是先定义好 template
,然后一顿 script
,再 style
,然后封装,其中有一个 $refs
的使用,你可以拿到组件的实例进行命令式的操作,同时各种事件和触发以及状态的操作,层出不穷,实在到了最后你还可以手动操作DOM。
但来到了 SwiftUI
中,组件的操作句柄没了,尤其不能在过程中去修改视图了(当然可能是我学的还不够深入),也就是说你得在定义视图的时候将所有的情况枚举完,大部分的行为都必须得抽象成数据、状态等等,一些对视图的修改你得抽象成 ViewModifier
,在视图定义处(或者 extension
,但最终都得视图调用)调用,用数据来控制它才行。
这是两种不同的思考方式,一种是描述+绑定+命令式(Vue
),一种就只有描述(swiftui
),或者说就是所谓的声明式视图与MVVM
的贯彻,虽说少了组件操作句柄,但是莫名地有一种感觉,逻辑反而更清晰了,尤其是我看代码的时候,不再像以前找半天发现结果是个 $refs
调用。
当然,这也许只是初学过程中的错觉,不过学习嘛,就是不断地踩坑,不断地更新自己的认知。
函数式的支持
在之前16章的学习中,有过把部分 view
抽出来成为一个函数,这个想法来自于 React + JSX
,这样如果你抽象的够好的话,完全可以避免大量的嵌套。(我曾经想过在 Vue
中实现这种操作,虽然当时搞成了,但是很痛苦,哈哈~)。
同时也有将行为封装成一个函数当做参数传递入组件,当做事件使用,这些来自以往积累的知识的想法,很自然地就融入了 SwiftUI
的学习使用,还是很有快感的。
一些无聊的点子
在各种思维的碰撞中,有一些无聊的点子与大家分享:
-
是不是
web
也可以搞出来像SwiftUI
的写法?@state,View
等等,描述性的语言( 同时保留Web DOM
操作的特性,不算Flutter
这种昂) -
是不是可以将后端的某些过程也按照这种强描述性的方式来写呢?
-
以上两个想法是不是可以综合一下,出一门全端的描述性语言?同时实现一下
extension、modifier
-
定义状态变量,描述视图,定义扩展,定义视图修改器,是不是可以用在低代码项目的设计上?将各类业务组件抽象成
View
,有默认的变量,然后调用、绑定、即可?
总结
- 以上只是中期的一些感悟记录,并非定论
- 或许之后我再回头看的时候又是另外的想法了
- 看看以后我会不会觉得这些感悟有其荒谬之处
- 或许有的点子已经有了实现之处
- 接下来继续出发学习
SwiftUI
。
欢迎关注公主号【思跃喵】,一起探讨。
网友评论