请教关于开发 iOS APP 的思路问题,有关 Swift 的 MVVM 架构思路,我刚开始学,请包涵 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
easonl
V2EX    wift

请教关于开发 iOS APP 的思路问题,有关 Swift 的 MVVM 架构思路,我刚开始学,请包涵

  •  
  •   easonl 2021-04-26 00:27:21 +08:00 2420 次点击
    这是一个创建于 1694 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是一个 SwiftUI/iOS 的开发初学者。关于 SwiftUI 提出的 MVVM 架构来建立响应式的程序架构,我能不能这么理解:

    我开发一个 iOS APP,就好像我要做一个手机,比如一个手机的零件分为:屏幕,SoC,扬声器,无线模块。对于 MVVM 架构,我首先要定义的 M ( Model ),就是把这些零件,先定义出来(在 Model 层建立各种 Struct 或者 class )

    然后在 VM 层( View Model )层,定义具体的零件的属性,例如屏幕分辨率是 1080P,SoC 是 5G-A14 的,扬声器是杜比立体声的,无线模块是 WIFI6 的。。。。

    最后,通过顶层的 V 层( View )组装起来,成为一台手机。

    我这么理解这个思路对吗?

    ================
    以上,如果我的理解是对的,意味着我要做一个 APP,首先就是要拆解我整个 APP 设计的各个零部件,然后先写成 Model,然后再去构造 ViewModel,最后在 View 组装呈现,对吗?
    3 条回复    2021-04-26 09:24:08 +08:00
    agagega
        1
    agagega  
       2021-04-26 01:01:12 +08:00
    我对 SwiftUI 的理解,它主要做了两件事:利用 Swift 的语法做了一套声明式描述 UI 的方法;实现了根据数据改变而重新渲染 View 的一套机制。有了这两个东西,SwiftUI 在思路上和前端 Vue 、React 那些 MVVM 框架就比较像了。

    所以你说的把 App 自上而下拆成各个 View 可能是开发中不那么复杂的部分。更重要的其实是处理「事件-数据-视图」的关系,也就是你说的 ViewModel 。比较小的 App 直接通过 State 、Binding 这几个表达状态的东西一把梭就行。

    大一些的就得考虑架构问题了。Apple 没有一个官方的参考方案,但可以参考前端对这个问题的思考,比如像 Redux 一样把所有的状态都放到一起,然后把所有操作都抽象成 action,再用 reducer 去产生新的状态。不过这些架构的优点都是在实践中体会出来的。把握了这个思路,SwiftUI 上手写一些简单的 App 还是挺快的,就是 Apple 的文档做得不好。
    free9fw
        2
    free9fw  
       2021-04-26 09:22:20 +08:00
    状态管理+双向绑定
    konnnnn
        3
    konnnnn  
       2021-04-26 09:24:08 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3640 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:57 PVG 08:57 LAX 16:57 JFK 19:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86