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

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

Core Data 受限于 Objective-C 可表达类型限制,在即使使用了标量转换情况下( Scalar )也不具备与 Swift 原生类型对应能力。...可能开发者会有这样疑问,假如某个实体属性在模型中被定义为可选,且在托管对象类型声明也为可选值类型( 例如上方 timestamp 属性 ),那么如果在可以保证 save 时一定有值情况下,是否可以在使用使用...删除与响应式编程托管对象实例创建于托管上下文中,且仅能安全运行于其绑定托管上下文所在线程之中。每个托管对象都对应着持久化存储一条数据( 不考虑关系情况下 )。...如今 Core Data,随着云同步以及持久化存储历史跟踪普及,数据库某个数据可能在任意时刻被其他设备或同一个设备中使用该数据库其他进程所删除。...在上节演示,当数据被删除后( 通过 onAppear 闭包延迟操作 ),NavigationView 会自动返回到根视图中。在这种情况下,持有该数据视图将伴随着数据删除一并消失。

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

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

Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...在 NavigationSplitView 边栏中使用 LazyVStackQ:iOS 16 新 NavigationSplitView 当前只与主( master ) List 一起工作。...因为这些使用并不有害,我们希望开发者因为使用了新编译器版本而处理一堆警告。...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 实现下面需求建议:打开一个窗口在该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口图中关闭一个窗口...然后用 SwiftUI Image 来加载,data 还挺大,当多个图同时加载,会卡顿和内存占用,请问这种情况下怎么改善A:首先尽量保证采用异步加载方式加载和创建图片,比如 SwiftUI AsyncImage

14.7K30

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

本文将通过探讨 Transaction 原理、作用、创建和分发逻辑等内容,告诉读者如何在 SwiftUI 实现更加精准动画控制,以及需要注意其他问题。...使用与特定值关联 .animation 修饰器版本,就可以避免动画异常问题了吗? 并不是。 在最初版本SwiftUI 只提供了一个版本 .animation。...使用显式动画屏蔽系统组件动画 在 iOS 17 SwiftUI 会让大多数系统组件( Sheet、FullScreeCover、NavigationStack、Inspector 等)在实现动画时...实现精准动画一些建议 在需要使用动画可动画组件附近声明“隐式动画”。 可能情况下使用“隐式动画”声明方法。 在同样效果下,优先使用“隐式动画”。...在使用“显式动画”时,通过在局部声明“隐式动画”来避免部分视图出现动画异常。 在需要情况下,可以通过 TransactionKey 提供更丰富上下文信息 尽量不在一次状态改变修改过多属性。

43620

何在Xcode下预览含有Core Data元素SwiftUI视图

结合两年来我在SwiftUI使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发避免类似的崩溃出现•如何在Xcode安全可靠地预览含有...通常在这种情况下,我们可能会采用如下方式来尝试解决: •删除模拟器上应用程序重新安装运行•清除编译缓存(Clean Build Folder)•删除项目对应派生数据(Derived Data)•重置模拟器...•在模拟器设备管理器删除模拟器再重新添加 上述手段,多数也都适用于修复某些情况下预览崩溃。...因此,通常推荐在视图中直接获取或操作Core Data数据(非常简单应用除外)。...此种情况下,通常我们会在模拟器删除App,重新安装运行即可解决问题。由于预览也是模拟器,在它沙盒中同样可能出现类似的问题。可以使用上文中关于预览模拟器修复方法来尝试解决。

5.1K10

SwiftUI 下定制手势

SwiftUI 手势在某种程度上降低了使用门槛,但由于缺乏提供底层数据 API,严重制约了开发者深度定制能力。...点击通常只关注 onEnded;onChanged(或 updating)在拖拽、缩放、旋转作用更大;长按只有在满足了设定时长情况下,才会调用 onEnded。...组合后手势,Value 类型也将发生变化。仍可使用 map 将其转换成更加易用数据类型。 手势定义形式 通常开发者会在视图内部创建自定义手势,如此代码量较少,且容易与视图中其它数据结合。...1.2 思路 在 SwiftUI 预置手势,仅有 DragGesture 提供了可用于判断移动方向数据。根据偏移量来确定轻扫方向,使用 map 将繁杂数据转换成简单方向数据。...在本例,我们选择在 TapGesture onEnded 回调用户闭包 总结 当前 SwiftUI 手势,暂处于使用门槛低但能力上限不足状况,仅使用 SwiftUI 原生手段无法实现非常复杂手势逻辑

2.6K20

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

请查看 ShareLink[3]contextActionQ:在早期 iOS 16 和 macOS 13 测试版,我们看到一个新 .contextAction 修改器,后来被删除了。...在使用 environmentObject 情况下,如何避免创建实例视图被重新计算Q:如何在避免重新计算顶层视图 body 情况下,在不同子树两个子视图之间共享状态( 例如 ObservableObject...阅读 SwiftUI 动画机制[8] 一文,了解更多有关动画内容。自适应高度 SheetQ:如何在 iOS16 呈现与动态内容高度相匹配 Sheet?...这可能会导致一些不好后果,例如使视图可重用性降低,并将业务逻辑与 SwiftUI 视图生命周期挂钩,这将使处理业务逻辑变得更加困难。简而言之,我们建议使用视图作为视图模型。...image-20221022135326560San Francisco 宽度风格Q:如何在 SwiftUI 如何使用 SF 字体家族新增三种宽度风格( Compressed、Condensed、Expanded

12.2K20

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

详细内容请参阅 如何在 Core Data 中使用 Derived 和 Transient 属性[4] 一文。...异步保存Q:嗨,将照片数据保存到 Core Data 时使用异步是否有必要?谢谢!A:你是在问是否应该使用 perform 或 performAndWait?...我也不确定 Category/Extension 作用以及如何在它和 Class 之间进行选择?A:大多数人会使用 Class,并在他们自己托管对象扩展添加他们需要任何自定义方法。...但是在极少数情况下,例如你需要添加必须在类定义声明属性,此时应使用 Category/Extension 使你可以控制所需类声明。...数据手动排序Q:在我应用程序,用户可以在表视图中通过拖放来重新排列项目。

3.2K20

SwiftUI使用 NSUbiquitousKeyValueStore 同步数据

对于返回可选值类型,应避免使用简便方法来获取值。...但在个别情况下仍会出现数据更新,设备之间不同步情况,例如:当 app 在正常运行过程,用户在系统设置中选择关闭 app iCloud 同步。...在多数情况下,我们可以将@AppStorage 看作是 UserDefaults SwiftUI 包装,但在个别情况下,@AppStorage 并不完全与 UserDefaults 行为保持一致(...在 SwiftUI图中使用 NSUbiquitousKeyValueStore 本节,我们将在不使用任何第三方库情况下,实现 SwiftUI 视图对 NSUbiquitousKeyValueStore...在不使用第三方库情况下,在 SwiftUI图中可以通过桥接@State 数据形式,将 NSUbiquitousKeyValueStore 变化同视图联系起来。

4.9K40

自定义 Button 外观和交互行为

PrimitiveButtonStyle 定制交互行为在 SwiftUI ,Button 默认交互行为是在松开按钮同时执行 Button 指定操作。...而 TapGesture 在不松开手指情况下,如果移动到可点击区域外,SwiftUI 将不会调用 onEnded 闭包操作。...默认情况下,即使单元格图中包含了多个按钮,SwiftUI 也只会将 List 单元格视作一个按钮( 点击后同时调用所有按钮操作 )。..._20.15.56.2023-02-15 20_16_30总结尽管自定义 Style 效果显著,但遗憾是,目前 SwiftUI 仅开放了少数组件样式协议供开发者自定义使用,并且提供属性也很有限。...希望在未来版本SwiftUI 可以为开发者提供更加强大自定义组件能力。希望本文能够对你有所帮助。

3.6K60

SwiftUI 状态管理系统指南

前言 SwiftUI与苹果之前UI框架区别不仅仅在于如何定义视图和其他UI组件,还在于如何在整个使用应用程序管理视图层级状态。...属性状态 由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高层次结构(应用程序和场景)API),其声明式设计不一定需要影响应用程序整个模型和数据层——而只是直接绑定到我们各种视图状态...尽管在一个父视图和它一个子视图之间创建绑定通常很容易,但在整个视图层次结构传递某个对象或值可能相当麻烦——而这正是环境变量旨在解决问题类型。 有两种主要方法来使用SwiftUI环境。...(在这种情况下是一个Theme实例),然后SwiftUI会处理其余事情。...——我们可以将其应用于我们层次结构何在其之上视图。

5K20

SwiftUI 与 Core Data —— 数据定义

无需更改代码便可以适应不同框架( 纯 SwiftUI 驱动、TCA 或其他 Redux 框架 )所有的视图均可以实现在不使用任何 Core Data 代码情况下进行预览,并可对 Mock 数据进行动态响应...遗憾是,托管对象对于以值类型为主 SwiftUI 来说并不算友好,因此,不少开发者都会在视图中将托管对象实例转换成一个结构体实例以方便接下来操作( 如何在 Xcode 下预览含有 Core Data...在创建 Core Data 模型情况下,完成绝大多数视图和逻辑代码。...,mockGroup 可以在没有托管环境情况下使用。...如果没有 AnyConvertibleValueObservableObject ,开发者仅能对应用部分视图进行预览( 在创建托管环境情况下 ),而通过 AnyConvertibleValueObservableObject

2.4K40

解析SwiftUI布局细节(二)循环轮播+复杂布局

SiwftUI文档说道比较好玩一个东西,具体我们后面在看。...NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用这样写也没啥问题,那我们界面跳转问题是什么呢?...3、再提一点关于上面说滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...方式去实现,很多同行有说目前来看SwiftUIList在数据量大情况下性能不是特别好,采用ScrollView是个不错方式,而且也很容易构建出来,并不是说每一个Item位置都需要你去计算,...spring():.none) /// 监听当前索引变化,最开始初始化为0是监听, .onChange(of: currentIndex, perform

11.8K20

@State 研究

研究意义何在 我在去年底使用SwiftUI写了第一个 iOS app 健康笔记,这是我第一次接触响应式编程概念。在有了些基本认识和尝试后,深深被这种编程思路所打动。...@State,我们可以在未使用mutating情况下修改结构值2.当状态值发生变化后,视图会自动重绘以反应状态变化。...Binding Binding是数据一级引用,在SwiftUI作为数据(状态)双向绑定桥梁,允许在拥有数据情况下对数据进行读写操作。...mutating func update()} 工作原理 前面我们说过 @State 有两个作用 1.通过使用@State,我们可以在未使用mutating情况下修改结构值2.当状态值发生变化后,...如何在满足单一数据源情况下最大限度享受SwiftUI优化便利?我将在下一篇文章中进行进一步探讨。

2.9K20

SwiftUI TextField 进阶 —— 事件、焦点、键盘

SwiftUI 3.0 ,苹果为开发者提供了一个远好于预期解决方案,同 onSubmit 类似,可以从更高视图层次来统一对视图中 TextField 进行焦点判断和管理。...在 SwiftUI 3.0 之前,我们必须在主视图上另外绘制或者使用SwiftUI 方式来解决问题,在 SwiftUI 3.0 ,由于添加了原生设置键盘辅助视图(下文具体介绍)功能,解决上述问题将不再困难...UITextContentType 种类有很多,其中使用比较多有: •password•姓名选项,:name、givenName、middleName 等等•地址选项, addressCity...同其他类型 Toolbar 类似,SwiftUI 会干预内容排版。•无法对同一视图中多个 TextField 分别设定辅助视图在 ToolbarItem 无法使用稍微复杂一点判断语法。...在不同视图种类(例如 List、Form、ScrollView),或使用辅助视图、textContentType 情况下都可以避免遮挡正在输入 TextField。

13.1K10

SwiftUI使用UIKit视图

SwiftUI使用UIKit视图 想获得更好阅读体验可以访问我博客www.fatbobman.com,或点击下方阅读原文 已迈入第三个年头SwiftUI相较诞生初始已经提供了更多原生功能...本文将通过对UITextField包装来讲解以下几点: •如何在SwiftUI使用UIKit视图•如何让你UIKit包装视图具有SwiftUI风格•在SwiftUI使用UIKit视图需要注意地方...,通常在此方法可以执行u删除观察器等善后操作。...,因此在Coordinator同样需要使用到Binding,如此对text操作即为对Demo视图中name操作。...通过直接响应该环境值变化,我们可以在编写特定TextFieldWrapper扩展情况下,即可为其增加配置功能。

8.1K20

SwiftUI TextField进阶——格式与校验

SwiftUI TextField进阶——格式与校验 想获得更好阅读体验,请访问我博客 www.fatbobman.com[1] SwiftUITextField可能是开发者在应用程序中最常使用文本录入组件了...如何在TextField实现格式化显示 现有格式化方法 在SwiftUI 3.0,TextField新增了使用新老两种Formatter构造方法。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 在SwiftUI,可以通过设置仅使用特定键盘类型来实现一定程度上录入限制。...可能屏蔽字符解决思路 •使用UITextFieldDelegatetextField方法•在SwiftUI图中使用onChange在录入发生变化时进行判断并修改 第一种思路,仍需使用Introspect...不利于判断用户是否录入新信息(更多信息可参阅如何在SwiftUI创建一个实时响应Form[10])。方案二允许不提供初始值,支持可选值。

8K20

何在SwiftUI实现interactiveDismissDisabled

何在SwiftUI实现interactiveDismissDisabled 想获得更好阅读体验,可以访问我博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...3.0新增功能——interactiveDismissDisabled增强版;如何创建更SwiftUI功能扩展。...需求 由于健康笔记[2]数据录入都是在Sheet中进行,为了防止用户在录入过程由于误操作(使用手势取消Sheet)丢失数据,因此,从最初版本开始,我就一直使用各种手段加强对Sheet控制。...默认情况下,展示(present)Sheet视图控制器(UIViewController)是没有设置委托。因此,只要将定义好委托实例在视图中注入给特定视图控制器即可实现以上需求。...在之前版本[8],用户使用手势取消时通知和其他逻辑是分离,在使用不仅繁琐,而且影响代码观感。本次将一并解决这个问题。

3.8K40
领券