V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
find456789
V2EX  ›  Swift

Swift 里有好多状态管理 AppStorage, Binding, Environment, EnvironmentObject, FetchRequest, ObservedObject, State, StateObject

  •  
  •   find456789 ·
    find456789 · 2021-05-25 14:46:41 +08:00 · 1437 次点击
    这是一个创建于 1039 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚接触 swift 不久

    初步发现, 状态管理, 要学这么多

    感觉好复杂啊

    我打算先学会 Combine, 然后再学 AppStorage,Binding,Environment,EnvironmentObject,FetchRequest,ObservedObject,State,StateObject

    不知 前辈们 有建议吗?

    谢谢

    4 条回复    2021-07-03 11:16:29 +08:00
    hstdt
        1
    hstdt  
       2021-05-25 15:01:12 +08:00 via iPhone   ❤️ 1
    先入门 Swift 和 SwiftUI 再学 Combine,FetchRequest 需要先点上 CoreData 技能点往后放放。AppStorage(SceneStorage)当修饰符看看就行。剩下的要好好理解下。一家之言,仅供参考。
    Building
        2
    Building  
       2021-05-25 18:29:33 +08:00 via iPhone
    其实不需要一下子都学完,除非是必要的功能。
    代码写多了你就会发现很多东西你自己就可以实现,然后你再去看这些关键字和用法,你会有恍然大悟的感觉。
    agagega
        3
    agagega  
       2021-07-03 11:15:56 +08:00 via iPhone   ❤️ 1
    这几个完全不一样的。

    AppStorage 封装的是 UserDefaults,以键值对信息存储一些内容并提供默认值,典型用途是用户设置。

    FetchRequest 是 Core Data 里面用的。

    State 才更像 MVVM 框架里的 Data,表示和界面绑定的状态,更改后界面会自动更新。

    ObservedObject 和 StateObject 这两个和 State 类似,适用于 class 而不是 struct/基本类型。这两种 Object 的区别在于生命周期,参考这篇文章: https://onevcat.com/2021/01/swiftui-state/

    Binding 是把 State 传给字视图的一种方式,和直接传值的区别在于对 Binding 的修改会发送通知,从而更新父视图。

    Environment 和 EnvironmentObject 是从根节点向所有的子视图传的东西,类型相对少,理解成全局单例吧。
    agagega
        4
    agagega  
       2021-07-03 11:16:29 +08:00 via iPhone
    @agagega
    所以对简单的 view,最核心的就是 State 和 Binding,其他的更像是延伸。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2751 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:35 · PVG 20:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.