美文网首页
SwiftUI入门 - 中期总结

SwiftUI入门 - 中期总结

作者: 思跃喵 | 来源:发表于2022-12-09 09:08 被阅读0次

    置顶

    菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行

    “不积跬步,无以至千里;不积小流,无以成江海”

    继续

    截止本文,【SwiftUI入门】系列已经有16篇文章,通过这段时间的学习,深刻地感受到 SwiftUI 这门技术与我之前已有的 web 知识体系的不同,其中最大的区别在于完整的强类型与声明式编程两个部分。

    当然除了不同之外,也有很多相似的地方,例如对函数式编程的支持,函数可以作为一个参数到处传递,当然也可以作为一个 View 来使用。

    我一向认为,一门语言或者技术既然能流行,自然有他独特的场景,或者其独特的思维逻辑。

    并且,很有可能当你学一门新的技术时,他的逻辑体系是与你已有的知识体系是相悖的或者是螺旋交叉的。

    当两种知识体系碰撞时,有的人会执着于争个对错搞下,但是实际上这种碰撞才是最佳的进步机遇。

    暴露自己的不足的同时,也在补全、扩张自己的知识体系。

    同样的在本次 SwiftUI入门的学习中我也遇到了很多思维的碰撞与思考,现将部分总结如下。

    完整的强类型

    我之前的常用编程语言是JavaScript(Vue、React)PHP(laravel),其他的诸如golangJavaPythonVBADartC# 等语言并不常用,仅在需要的场景才会搬出这些技能来。

    JavaScriptPHP 同有一个特点就是弱类型,当然 JavaScriptTypeScript 这种超集语言,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,有默认的变量,然后调用、绑定、即可?

    总结

    1. 以上只是中期的一些感悟记录,并非定论
    2. 或许之后我再回头看的时候又是另外的想法了
    3. 看看以后我会不会觉得这些感悟有其荒谬之处
    4. 或许有的点子已经有了实现之处
    5. 接下来继续出发学习 SwiftUI

    欢迎关注公主号【思跃喵】,一起探讨。

    相关文章

      网友评论

          本文标题:SwiftUI入门 - 中期总结

          本文链接:https://www.haomeiwen.com/subject/bbnofdtx.html