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

SwiftUI 与 Core Data —— 数据获取

本文中我们将探讨 SwiftUI 视图中批量获取 Core Data 数据的方式,并尝试创建一个可以使用 mock 数据的 FetchRequest。...FetchRequest 获取 )由于 TCA 的 Reducer 无法与视图的存续期自动绑定,上面的可感知延迟每次触发 onAppear 时都将出现最终,我决定放下心结,仍然采用在视图中使用类似...这将有两个作用:数据变化后将引发与其绑定的视图进行更新由于底层数据并不保存在视图中,因此视图存续期中 SwiftUI 可以随时创建新的视图描述实例而无需担心数据丢失虽然苹果没有公开 _makeProperty...不可在 update 方法中同步地改变引发视图更新的数据与 SwiftUI 视图中更新 Source of truth 的逻辑一致,一个视图更新周期中,不能对 Source of truth 再度更新...image-20221203185621897允许构造方法中不提供 NSFetchRequest当在视图中使用 @FetchRequest 时,我们必须在声明 FetchRequest 变量时设置 NSFetchRequest

4.6K30

架构之路 (七) —— iOS App的SOLID原则(一)

你需要内存存储来 SwiftUI 预览中显示虚假数据。...将 getEntries() 的实现更改为以下内容: let fetchRequest: NSFetchRequest = ExpenseModel.fetchRequest...对于每个枚举案例,您将创建一个新的导航链接。 最后,检查 ContentView 和 ExpensesView 的预览以确保您的重构没有破坏任何内容。 构建并运行,然后检查您之前保存的报告。 4....此外,如果您决定放弃 Core Data 并使用其他一些存储解决方案,依赖倒置将让您轻松更换底层模型实现,而无需更改视图中的任何代码。 当您想要创建单元测试时,同样的概念也适用。...如果修改要保存的字段,则需要将此更改传播到两个视图。但是,如果您直接传递数据源,则列表视图将不负责有关如何保存信息的任何详细信息。

4.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

掌握 Transaction,实现 SwiftUI 动画的精准控制

因此,接下来的内容中,我们将详细地介绍和阐述 transaction 的细节和实现,帮助你更好地理解。...什么是显式动画 视图中,通过 animation 或 transaction 修饰器声明的 transaction 被称为“隐式动画”。...支持设置 Transaction 或 Animation 的组件 SwiftUI 中,一些组件或类型允许开发者为其设置 transaction 或 animation,例如:Binding、FetchRequest...使用“显式动画”时,通过局部声明“隐式动画”来避免部分视图出现动画异常。 需要的情况下,可以通过 TransactionKey 提供丰富的上下文信息 尽量不在一次状态改变中修改过多的属性。...包装 UIKit 或 AppKit 控件时,应添加检查当前 transaction 的逻辑。 iOS 17 中,更多的导航组件已支持通过使用“显式动画”来屏蔽动画转场。

44220

ObservableObject研究

,数据流并非完全单向的•部分视图中可以结合SwiftUI通过的其他包装属性如@FetchRequest等将状态局部化 后两项是利用SwiftUI的特性,也可以不采用,完全采用单向数据流的方式 基于以上方法...详细的分析请参见 @State研究 即使你只View中发送action,并没有显示State中的数据或使用其做判断,该View也会被强制刷新。...SwiftUI下开发,无论是主观还是客观都需要你将View的表述精细化,用更多的子View来组成你的最终视图,而不是把所有的代码都尽量写在同一个View上。...•在当前View使用SwiftUI提供的其他包装属性我现在最常使用的SwiftUI的其他包装属性就属@FetchRequest了。...最后希望Apple能够将来提供原生的方式解决以上问题。

2.4K60

架构之路 (五) —— VIPER架构模式(一)

路由器Router处理屏幕之间的导航。这与SwiftUI不同,SwiftUI中,视图显示任何新视图。...路由器Router允许用户从旅行列表视图trip list view导航到旅行详细信息视图trip detail view。trip detail视图将显示路线点列表以及路线地图。...当您将其放置NavigationView中时,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。...Considering the Map View 转向细节视图之前,考虑一下地图视图。这个widget比其他的复杂。 除了绘制地理特征,该应用还会覆盖每个点的大头针pins和它们之间的路线。...您可以trip detail视图中重新排列列表。但是要创建一个新的waypoint,您需要一个新视图,以便用户输入名称。 为了得到一个新的视图,你需要一个Router。

17.4K10

SwiftUI 与 Core Data —— 安全地响应数据

本文将介绍可能在视图中产生严重错误的原因,如何避免,以及保证视图对数据变化实时响应的前提下如何为使用者提供更好、准确的信息。由于本文会涉及大量前文中介绍的技巧和方法,因此最好一并阅读。...修改为 String )当声明代码可以部分改善视图中使用托管对象的友善度。相较于将具有默认值的属性声明为可选值类型( 例如 String ),数值属性的声明则更加令人困惑。...代码或视图中,如果不为随时可能已被删除的数据做好安全准备,问题将十分地严重。...随着 FetchRequest 的内容发生变化,List 将重新刷新,由于 NavigationLink 对应的数据不复存在,因此 NavigationView 自动返回了根视图。...通过视图中获取值类型数据对应的托管对象实例,便可以既保证安全,又保持了响应的实时性。为了演示方便,仍以普通的 SwiftUI 数据流举例:@State var item: ItemValue?

3.2K20

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

单元测试中,很难对 SwiftUI 视图中的依赖( 符合 DynamicProperty 协议 )进行测试。这也是 Redux-like 框架的优势之一( 将状态从视图中抽离出来,方便测试 )。...对于苹果工程师给予的建议有一点请注意,那就是如果有视图中修改该环境对象实例的需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型的实例 )。...常规宽度下,我们详细视图中有一个带有导航堆栈的侧边栏。紧凑宽度下,我们有一个标签栏,每个标签都有一个导航堆栈。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,详细视图中显示一条信息,如果折叠,则显示一个警告或其他指示 )。...这就涉及到了所有符合 DynamicProperty 协议的属性包装器的一个特点:视图的生存期内仅有第一次初始化的实例会与视图创建关联。详细请阅读 避免 SwiftUI 视图的重复计算[22] 。

12.2K20

Ask Apple 2022 中与 Core Data 有关的问答 (下)

@FetchRequest 的性能如何Q:@FetchRequest 性能方面是否优于 ViewModel 的构造方法中通过 fetchRequest 获取数据的方式?...还是只使用一个 fetchRequest,然后将数据保存在本地,并通过上述方法访问它( 应该是指第一种方式 )?我想知道这里的最佳做法是什么。谢谢!A:一般来说,不同的视图经常使用不同的获取请求。...改成 String;2、声明一个非可选值的计算属性,并在其中对可选值属性值进行处理;3、将托管对象实例整体转换成对 SwiftUI 视图更加友好的值类型。...数据手动排序Q:我的应用程序中,用户可以视图中通过拖放来重新排列项目。...筛选关系数据Q:我发现在 SwiftUI 中使用 @FetchRequest 是将用户界面与 Core Data 数据绑定很好的手段。然而,使用关系来获得同样的无缝绑定时,我碰到了一个小问题。

3.2K20

Ask Apple 2022 中与 Core Data 有关的问答

SwiftUI 中,我们通常会使用 environment 为视图树注入视图上下文,一旦 loadPersistentStores 出现错误导致 container 无法正常创建,那么调用上下文的注入将会失败...您可以通过 @FetchRequest[8] 从存储中获取检索结果。@FetchRequest 是个让人又爱又恨的东西。它很好用,几乎是视图中获取数据的首选。...动态修改 @FetchRequest 的配置Q: SwiftUI 应用程序中,如何基于 @AppStorage 值创建 @FetchRequest?...用例是:当我打开 Focus 过滤器时,我将 @AppStorage 值更改为用户希望我的应用程序中看到的标签列表。...A:@FetchRequest 的谓词属性是一个 Binding,它会在更改时重绘视图。从 Swift 3.0 开始,FetchRequest 支持视图中动态修改它的谓词和排序描述。

2.8K20

用NavigationViewKit增强SwiftUI导航视图

用NavigationViewKit增强SwiftUI导航视图 如果想获得更好的阅读体验,请访问我的博客 www.fatbobman.com[1] 最近一直在为我的iOS健康管理app健康笔记3.0[...由于SwiftUI原生提供的导航手段能力有限,因此之前的版本中,NavigationView总是使用的不是那么的顺手。...下的任意视图通过代码直接返回根视图NavigationView下的任意视图中通过代码直接跳转到新视图(无需视图中描述NavigationLink)•通过NotificatiionCenter,指定应用程序中的任意...从视图中返回根视图 注册过的NavigationView的任意子视图中,可以通过下面的代码实现返回根视图: @Environment(\.navigationManager) var nvmanager...视图中支持SwiftUI原生的所有定义,例如toolbar、navigationTitle等。 目前启用转场动画时,title和toolbar会在转场动画后才显示,观感稍有不足。日后尝试解决。

3.2K20

避免 SwiftUI 视图的重复计算

SwiftUI视图加载到视图树时,通过调用 _makeProperty 完成将数据保存到托管数据池以及属性图中创建关联的操作,并将数据托管数据池中的引用保存在 _location ( AnyLocation...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图SwiftUI 上有一个困扰了不少人的问题:为什么无法视图的构造函数中,更改 State 包装的变量值?...这是因为,我们将 Student 类型作为参数传递给了子视图SwiftUI 比对实例的时候,并不会关心子视图中具体使用了 student 中的哪个属性,只要 student 发生了变化,那么就会重新计算...life cycle 转型,苹果为 SwiftUI 提供了一系列可以直接在视图中处理事件的视图修饰器,例如:onReceive、onChange、onOpenURL、onContinueUserActivity...,我希望大家将关注点集中于这些技巧背后对应的原理。

9.2K81

SwiftUI 4.0 的全新导航系统

欢迎大家 Discord 频道[2] 中进行更多地交流 长久以来,开发者对 SwiftUI导航系统颇有微词。...SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈为管理对象的新 API ,让开发者可以轻松实现编程式导航。本文将对新的导航系统作以介绍。...⚠️ 使用堆栈管理系统的情况下,请不要在编程式导航中混用声明式导航,这样会破坏当前的视图堆栈数据 下面的代码,如果点击声明式导航,将导致堆栈数据重置。...分栏布局 SwiftUI 4.0 之前的版本,可以这样使用 NavigationView 来创建拥有左右两个栏的编程式导航视图: class MyStore: ObservableObject {...macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我 用 NavigationViewKit 增强 SwiftUI导航视图[4]

10.2K62

【visionOS】从零开始创建第一个visionOS程序

创建你的Xcode投影页面链接 Xcode中选择File >新比;项目。导航到模板选择器的visionOS部分,并选择App模板。当出现提示时,为项目指定一个名称以及其他选项。...修改现有的窗口页面链接 使用标准的SwiftUI视图构建初始接口。视图为您的界面提供基本内容,您可以使用SwiftUI修饰符自定义视图的外观和行为。...} ImmersiveSpace(id: "Immersive") { ImmersiveView() } } } 页面链接中处理视图中的事件...你也可以视图中添加SwiftUI手势识别器来处理点击、长按、拖动、旋转和缩放手势。...构建并运行你的app页面链接 模拟器中构建并运行你的应用,看看它看起来如何。visionOS的模拟器有一个虚拟背景作为你的应用程序内容的背景。使用键盘和鼠标或触控板环境中导航并与应用程序交互。

70840

SwiftUI中的水平条形图

对于垂直条形图组件和水平条形图组件来说,重复使用一些结构和SwiftUI视图并不简单。标题和关键区域可以原样重用。创建BarChartView的副本,并将其名称改为BarChartHView。...它控制了图表的布局,其中的三个视图改为YaxisHView、ChartAreaHView和XaxisHView,它们最初只是垂直条形图中使用的视图的副本。...更新Y轴 我们创建了一个YaxisHView视图,用于水平条形图上显示Y轴和条形图中的数据类别。...水平条形图中,显示条形图上的数值并隐藏X轴可以使图表简洁。 显示和隐藏水平条形图上的元素 结论 创建水平条形图的SwiftUI代码与创建垂直条形图的代码不同。...这可能是将这些组件分解成更小的SwiftUI视图并通过组合来重用的原因。

4.7K20

老人新兵 —— 一款 iOS APP 的开发手记

img上图中的化验单是最近 1 年内的验血结果之前也使用过电子表格整理过数据,但并不顺手。 app 种类非常丰富的今天,也找过不少的 app 试图进行集中管理,不过效果并不理想。...很难实现直接返回到根视图,通过 dissmiss 只能返回到上层视图 Xcode 11 的 beta 版本中还可以采用一些非常规手段实现这一功能,不过目前已被屏蔽了。...但由于这个多层返回是显式的,也就是都有完整的动画,超过一层时,使用者的感觉会怪。最后仅是在当 view ZStack 的后面时使用了这个手段。Sheet问题很奇怪。...@FetchRequest 对数据的动态管理非常好, SwiftUI 中数据的任何变化都能动态体现。...@FetchRequest 目前只能在 init 中通过参数动态设置一次( 无法动态修改 ),如果需要显示不同的谓词或排序结果,只能通过上层视图重新设置。

2.5K40

苹果全新UI框架来了!可视化编程,自动化减少20%代码量

目前TOIBE排名18位: ? RedMond排名11 ? SwiftUI还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。 SwiftUI都更新了什么?...而拥有简单,更快速,安全的SwiftUI为开发人员实现真正的平台独立性迈出了一大步。 人人都能编程 SwiftUI继承了Swift的理念:每个人都可以编程。...感受一下SwiftUI的代码风格 ? Github一个repo整理了WWDC 2019发布的SwiftUI布局框架的一些官方示例: SwiftUI Essentials 创建和组合视图: ?...创建列表和导航栏: ? 处理用户输入: ? Drawing and Animation 绘图路径和形状: ? 动画视图和过渡 ? App Design and Layout 复杂界面组合: ?...你对SwiftUI有哪些期待呢?敬请留言吧! 参考链接: https://github.com/Jinxiansen/SwiftUI/blob/master/README_CN.md

5.3K20

SwiftUI中使用UIKit视图

当UIViewRepresentable视图中的注入依赖发生变化时,SwiftUI会调用updateUIView。...该方法UIViewRepresentable的生命周期中会多次调用,直到视图被移出视图树(准确地描述是切换到另一个不包含该视图视图树分支)。...•处理UIKit视图中的复杂逻辑UIKit开发中,通常会将业务逻辑放置UIViewController中,SwiftUI没有Controller这个概念,视图仅是状态的呈现。...makeUIView中,我们使用textfield.text = text获取了Demo视图中name的值,但makeUIView只会执行一次。...所谓的SwfitUI风格化,确切地说应该是函数式编程的链式调用。将多个操作通过点号(.)链接在一起,增加可读性。作为将函数视为一等公民的Swift,实现上述的链式调用非常方便。

8.1K20

面向所有人的 UI 编程 :透过点按弹窗初尝 SwiftUI

写 SwiftUI 得过程,实际上就是将一个个最基本的 View 像滚雪球一样越包越大的过程,你把一个个基础的视图和修改器用一个更大的视图包在一起,用修改器修改更大的视图,就能实现复杂的功能。...纵向排列的 View SwiftUI 里叫做 VStack,它用一个花括号 {包住里面的内容};而文字的 View SwiftUI 里叫做 Text。...中文里圆括号中的各种要求,正是 SwiftUI 里的各种修改器,语法结构是 「.修改器的名字」。比如下图中我们想修改为小标题的字体,就写 .font(.headline)。 ?...这里关于 Button 的解释若你不熟悉编程可能会有点晕,没关系,我会在其它文章详细讲解。 ? 在上图中,你会发现背景变成蓝色的了,为什么?...我会在其它文章中详细讲解。

2.1K40

Xcode 11 初体验(Xcode工作流的改进(Workflows))

前面翻译过一篇官方文档: 但是大家纷纷反馈看不懂,其实大家希望看到就是一些带着更新去操作的东西。...将 Assistant、和 Vesion Editor下的 Autor 选项卡合并为一项,并从主导航中移除,向下移到每个编辑面板中,组成 Editor Option。...主导航中只保留Code Review功能。 新增Add Editor、MiniMap。...Editor and Canvas:代码编辑器和 SwiftUI预览视图。 Editor and Assistant:代码编辑器和辅助视图。...按住 Option 按键点击它,会纵向分割, 下图是一个分割后的界面示例 [1240] 上图中界面被分成了 3 个编辑窗口。 左边被上下分割成了两个小窗口,右边被单独分割出一个大窗口。

2.5K40
领券