首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

肘子的 Swift 周报 #015 | 新框架、新思维

肘子的话 我最近开始重新开发我的“健康笔记”应用程序。由于新版本将只支持 iOS 17 及以上版本的设备,这让我在选择技术路线上享有更大的自由。...除了性能提升之外,这种基于类的状态管理方式还为我带来了许多新的灵感,使状态管理更加贴合 SwiftUI 的实践。它让状态的拆分和组合不再局限于纯粹的状态管理代码。...@Observable Macro performance increase over ObservableObject[7] Antoine van der Lee[8] 本文深入探讨了在 SwiftUI...,对于减少 SwiftUI 重绘的显著改进。...因此,作者着手自主开发了一个纠错工具,并已将其作为开源项目发布。文章中,作者详尽地介绍了这一工具的技术实施方案,涵盖了从文本文件检测、分句处理到词语检测和整体工具集成的各个环节。

14210

ObservableObject研究

ObservableObject研究——想说爱你不容易 如想获得更好的阅读体验,可以访问我的博客www.fatbobman.com 本文主要研究在SwiftUI中,采用单一数据源(Single Source...of Truth)的开发模式,ObservableObject是否为最佳选择。...总的来说,当前在SwiftUI框架下,大家的实现手段主要的不同都体现在细节上,大的方向、模式、代码构成基本都差不多: •Store对象遵守ObservableObject协议•State保存在Store...主观方面 •更小的耦合性•更强的复用性 客观方面 ViewBuilder的设计限制 FunctionBuilder作为Swift5.1的重要新增特性,成为了SwiftUI声明式编程的基础。...它为在Swift代码中实现DSL带来了极大的便利。不过作为一个新生产物,它目前的能力还并不十分的强大。

2.4K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SwiftUI WWDC作为开发者的我最激动的部分

    SwiftUI 所有Apple平台都是原生的 ---- SwiftUI在创造世界上最创新、最直观的用户界面方面积累了数十年的经验。...SwiftUI是什么 ---- SwiftUI是一种创新的、非常简单的方法,可以利用Swift的强大功能在所有苹果平台上构建用户界面。使用一组工具和api为任何苹果设备构建用户界面。...您的代码比以往任何时候都更简单、更易于阅读,从而节省了您的时间和维护。 ? 这种声明式风格甚至适用于复杂的概念,如动画。轻松添加动画到几乎任何控件,并选择一个集合的准备使用的效果只有几行代码。...SwiftUI 工具是什么样的呢 ---- Xcode 11包含了直观的新设计工具,使用SwiftUI构建界面变得像拖放一样简单。...当您在设计画布中工作时,您编辑的所有内容都与相邻编辑器中的代码完全同步。当您键入时,代码作为预览立即可见,并且您对该预览所做的任何更改都会立即出现在您的代码中。

    2.3K30

    深度解读 Observation —— SwiftUI 性能提升的新途径

    此外,在 SwiftUI 中,引用类型的数据源(Source of Truth)采用了基于 Combine 框架的 ObservableObject 协议实现。...在 Xcode 15 中,在@Observable 处点击鼠标右键,选择“Expand Macro”操作。...SwiftUI 将根据可观察对象在视图中的注入方式选择对应的观察手段。 例如,上文中同时满足两种观察途径的可观察对象,根据其注入的方式不同,SwiftUI 采用的更新策略也将不同。...详细信息,请阅读 为自定义属性包装类型添加类 @Published 的能力[4] 一文。...Observation 是否解决了 ObservableObject 的性能问题 是的,Observation 框架从两方面改善了可观察对象在 SwiftUI 中的性能表现: 通过观察视图中的可观察属性而不是可观察对象

    62320

    SwiftUI 状态管理系统指南

    其中一个机制是ObservableObject协议,当它与ObservedObject属性包装器结合时,我们可以设置与我们视图层之外管理的引用类型的绑定。...作为一个例子,让我们更新上面定义的ProfileView——通过将管理User模型的责任从视图本身转移到一个新的、专门的对象中。...现在,我们可以用许多不同的方式来描述这样一个对象,但由于我们正在寻找创建一个类型来控制我们的一个模型的实例——让我们把它变成一个符合SwiftUI的ObservableObject协议的模型控制器[2]...,我们的UserModelController现在需要作为初始化器的一部分被注入到ProfileView中。...(article.body) .foregroundColor(theme.bodyTextColor) } } } 然后,我们必须确保在我们的视图的某一个父类中提供我们的环境对象

    5.1K20

    SwiftUI @State @Published @ObservedObject 深入理解和使用

    1.SwiftUI 是Apple 新出面向未来、跨多端解决方案、声明式编程 SwiftUI最新版本 2.0 但是需要 IOS 14 支持,多数现在还用的是IOS 13 所以很多不完善的东西都用SwiftUIX...但是相信我,这是值得的:随着你的进步,你会了解到SwiftUI经常破坏和重新创建你的结构体,所以保持它们的小而简单的结构对性能很重要。...@Published + @ObservedObject 介绍 @Published是SwiftUI最有用的包装之一,允许我们创建出能够被自动观察的对象属性,SwiftUI会自动监视这个属性,一旦发生了改变...:不是 如果层次再深一点的model 还是有bug,触发不了 4.总结以及解决方案 /// 既然我们知道View 跟 状态绑定的关系 /// 是以第一继承ObservableObject 类 下的属性(...类的 /// 所以,直接继承 ObservableObject 下的属性(字段)没更新,就不会更新View /// 最简单的解决办法就是 更新直接继承 ObservableObject(父对象) 里面的随便一个属性

    3.4K10

    我庆幸果断放弃了SwiftUI:它还不够成熟

    之所以下决心选择 SwiftUI,就是因为初步测试时效果不错。如上图所示,地图编辑器位于左侧,检查器位于右侧。起初,我测试了一个 UI 元素,那是个用于开灯和关灯的勾选框。...但在开始实现更复杂的检查器视图时,特别是涉及带有 / 不带步进器或颜色选择器的多个文本字段时,整个运行速度开始剧烈下降。...我在网上查找了解决方案,最后编写了一个延迟版本的 ObservableObject,由它来强制每秒只发布一次更改(参见以下代码)。...也许 SwiftUI 还没做好全面替代 AppKit 的准备。The Untitled Project 的 CiderKit 创作工具并不是作为 Catalyst 应用构建的,也不依赖于 UIKit。...但我至少可以更好地控制应用程序的行为,而且根据需求随意调整各种元素。 总之,经历了这么一番波折,我还是很庆幸自己果断放弃了 SwiftUI。这可能是我在这个项目上做过的最明智的选择。

    5.1K20

    探讨 SwiftUI 中的几个关键属性包装器

    @State 用于管理视图的私有状态。 它主要用于存储值类型数据(与视图的生命周期一致)。 典型应用场景 当需要因视图内的数据变化而触发视图更新时,@State 是理想的选择。...: String = "" } } @StateObject @StateObject 是 SwiftUI 中用于管理符合 ObservableObject 协议的对象实例的属性包装器,以确保这些实例的生命周期与当前视图一致...中用于为视图与 ObservableObject 实例之间创建关联的属性包装器,主要用于在视图存续期内引入外部的 ObservableObject 实例。...需要动态切换实例的场景。比如在 NavigationSplitView 中,sidebar 中选择不同的实例,detail 视图动态更换数据源。...选择正确的工具对于构建高效、可维护的 SwiftUI 应用是至关重要的。正如在软件开发中经常提到的,没有一种工具是万能的,但恰当地使用它们可以大大提高我们的开发效率和应用质量。

    38010

    在 SwiftUI 下使用 NSUbiquitousKeyValueStore 同步数据

    NSUbiquitousKeyValueStore 在大多数场合下表现的同 UserDefaults 十分类似: •都是基于键值存储•只能使用字符串作为键•可以使用任意属性列表对象(Property list...但在个别情况下仍会出现数据不更新,设备之间不同步的情况,例如:当 app 在正常运行过程中,用户在系统设置中选择关闭 app 的 iCloud 同步。...将 NSUbiquitousKeyValueStore 的变化同一个可以导致视图刷新的数据(State、ObservableObject 等)关联起来,就可以实现同@AppStorage 一样的效果。...很多开发者在选择支持 NSUbiquitousKeyValueStore 的第三方库时,可能会率先想到 Zephyr[6]。...我对 CloudStrorage 进行了一点修改,在几个数据更改的时机点上添加了通知机制,通过在符合 ObservableObject 的类中,响应该通知并调用objectWillChange.send

    5K40

    SwiftUI:使用 @EnvironmentObject 从环境中读取自定义值

    SwiftUI的环境使我们可以使用来自外部的值,这对于读取Core Data上下文或视图的展示模式等很有用。...在向您展示一些代码之前,还有最后一件事:环境对象使用您已经学过的ObservableObject协议,SwiftUI将自动确保共享同一环境对象的所有视图在更改时都会更新。...ObservableObject和@Published就像我们以前学到的那样——您积累的所有知识将继续得到回报。...接下来,我们可以定义两个SwiftUI视图以使用我们的新类。...好吧,您已经了解到字典如何让我们使用一种类型作为键key,而另一种类型作为值。环境有效地使我们可以将数据类型本身用作键,并将类型的实例用作值。

    9.7K20

    为自定义属性包装类型添加类 @Published 的能力

    访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验 本文将对 @Published 与符合 ObservableObject 协议的类实例之间的沟通机制做以介绍,并通过三个示例...协议的类中,通过 @Published 标记的属性在发生改变时,除了会通知自身 Publisher 的订阅者外,也会通过包裹它的类实例的 objectWillChange 来通知类实例( 符合 ObservableObject...这一特性,也让 @Published 成为 SwiftUI 中最有用的属性包装器之一。...wrappedValue 的 objectWillChange ,每当 wrappedValue 发生改变时,将调用指定的闭包 在属性包装器创建后,系统会立刻调用静态下标的 getter 一次,选择在此时机完成对...因此,我们可以使用如下的代码在 SwiftUI 中统一管理 UserDefaults : class Defaults: ObservableObject { @AppStorage("name

    3.4K20

    SwiftUI 4.0 的全新导航系统

    : 由于无需在 NavigationLink 中指定目标视图,因此无须创建多余的视图实例 对由同一类型的值驱动的目标进行统一管理( 可以将堆栈中所有视图的 NavigationLink 处理程序统一到根视图中...)进行响应,使用 removeLast(_ k: Int = 1) 返回指定的层级,使用 append 进入新的层级 class PathManager:ObservableObject{ @...分栏布局 在 SwiftUI 4.0 之前的版本,可以这样使用 NavigationView 来创建拥有左右两个栏的编程式导航视图: class MyStore: ObservableObject {...样式 在之前版本的 SwiftUI 中,NavigationLink 其实一直都是作为一种特殊的 Button 存在的。...到了 SwiftUI 4.0 版本后,SwiftUI 已经将其真正的视为了 Button 。

    10.4K62

    SwiftUI-数据流

    用@State修饰的属性,只要属性改变,SwiftUI 内部会自动的重新计算 View的body部分,构建出View Tree,由于 View 都是结构体,SwiftUI 每次构建这个 View Tree...ObservableObject 在应用开发过程中,很多数据其实并不是在 View 内部产生的,这些数据有可能是一些本地存储的数据,也有可能是网络请求的数据,这些数据默认是与 SwiftUI 没有依赖关系的...@Published 是 Xcode11 beta5 之后新增的代理属性,此属性如果用在 ObservableObject 内,一旦修饰的属性发送了变化,会自动触发 ObservableObject 的...ObservableObject 是一个协议,必须要类去实现该协议。 ObservableObject 适用于多个 UI 之间的同步数据。...数据流图 从上图可以看出SwiftUI 的数据流转过程: 用户对界面进行操作,产生一个操作行为 action 该行为触发数据状态的改变 数据状态的变化会触发视图重绘 SwiftUI 内部按需更新视图,

    10.2K20

    Ask Apple 2022 与 SwiftUI 有关的问答(下)

    A:用数组索引来存储选择是很脆弱的:如果数组发生了突变,选择就会变得不同步。Swift Collections[6] 有一个 OrderedDictionary,可能会对你有所帮助。...Swift Identified Collections 是基于 OrderedDictionary 实现的一个拥有键属性的类数组。它的唯一要求是元素必须符合 Identifiable 协议。...实际上,我们有一个非常棒的 WWDC 演讲[9],详细介绍了并发性和 SwiftUI ,特别提到了有关使用 ObservableObject 的情况。...A:我想说的是,如果可以,将 macOS Ventura 作为目标平台会对其中的一些操作更有帮助。...TextField 中文输入的问题Q:请问 SwiftUI 的 TextField 在中文输入时,会在字母选择阶段就直接上屏,造成输入内容错误的问题是已知问题吗?会在 16.1 RC 修复吗?

    14.8K30
    领券