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

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

SwiftUI 4.0 中,contextMenu 功能获得了不小提高。例如一个上下文菜单中可以有多个选项、支持 primaryAction、以及可定制预览视图。...不过,传统 viewModel 意义上,我建议将视图( 结构本身 )作为视图模型。...跨视图层次共享Q:在数据来自 API 响应情况下多个视图之间共享数据最佳方式是什么?...请注意,你数据需要是可选,或者指定一个默认值,因为某些情况下,框架自身也会创建窗口( 例如,当选择新窗口菜单项 )。...某些情况下,利用惰性视图修饰,不仅可以保持视图身份稳定,同时也能获得 SwiftUI 更多优化。例如用 .opacity(value < 10 ?

12.2K20

SwiftUI + Core Data App 内存占用优化之旅

当子视图进入惰性容器可视区域时,SwiftUI 会调用它 onAppear 闭包,子视图退出可视区域时,会调用 onDisappear 闭包。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图 body 值。...这意味着,惰性容器中,视图一经创建,其存续期将与该容器一致( 容器销毁,则视图将始终存续 )。...在这种情况下,我们可以通过引用类型来创建一个 Holder,通过该持有,解决释放积极问题。...} 最终代码中,我们对图片数据在内存中三个备份实现了有效控制。同一时间( 理想情况下 ),只有出现在可视区域图片数据才会保存在内存中。

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

SwiftUI + Core Data App 内存占用优化之旅

当子视图进入惰性容器可视区域时,SwiftUI 会调用它 onAppear 闭包,子视图退出可视区域时,会调用 onDisappear 闭包。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图 body 值。...这意味着,惰性容器中,视图一经创建,其存续期将与该容器一致( 容器销毁,则视图将始终存续 )。...在这种情况下,我们可以通过引用类型来创建一个 Holder,通过该持有,解决释放积极问题。...} 最终代码中,我们对图片数据在内存中三个备份实现了有效控制。同一时间( 理想情况下 ),只有出现在可视区域图片数据才会保存在内存中。

1.3K10

StateObject 与 ObservedObject

StateObject 是 SwiftUI 2.0 中才添加属性包装,它出现解决了某些情况下使用 ObservedObject 视图会出现超预期问题。...请阅读 [SwiftUI 视图生命周期研究](SwiftUI 视图生命周期研究 "SwiftUI 视图生命周期研究") 一文,了解更多有关视图与实例之间关系属性包装Swift 属性包装(...很多情况下,我们需要从视图角度来理解 SwiftUI 属性包装名称,例如:ObservedObject ( 视图订阅某个可观察对象 )StateObject( 订阅某个可观察对象,并持有其强引用... SwiftUI视图添加到视图树上时,调用 _makeProperty 方法将需要持有的订阅关系、强引用等信息保存到 SwiftUI 内部数据池中。...StateObject 抑或添加属性包装视图中声明类实例,都会随着视图描述实例创建而一遍遍地被多次创建。

2.4K20

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

全新数据流声明和注入方式 利用 Swift 5.9 新特性,对于引用类型 Source of truth,只需使用 @Observable 进行标注,视图将对数据变化以属性为粒度进行响应。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 视图进入后...不考虑兼容旧版本情况下,我认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装) Attribute 派生选项被废弃了 可以 Xcode 中使用 Model Editor 将 Model

1.1K20

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

全新数据流声明和注入方式 利用 Swift 5.9 新特性,对于引用类型 Source of truth,只需使用 @Observable 进行标注,视图将对数据变化以属性为粒度进行响应。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 视图进入后...不考虑兼容旧版本情况下,我认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装) Attribute 派生选项被废弃了 可以 Xcode 中使用 Model Editor 将 Model

36610

优化 SwiftUI List 中显示大数据响应效率

找寻问题原因 或许有人会认为,毕竟数据量较大,进入列表视图有一定延迟是正常。但即使 SwiftUI 效能并非十分优秀今天,我们仍然可以做到以更小的卡顿进入一个数倍于当面数据列表视图。...但在某些情况下,我们需要使用显式标识( Explicit identity )方式来帮助 SwiftUI 辨认视图。...使用了 id 修饰符相当于将这些视图从 ForEach 中拆分出来,因此丧失了优化条件。 总之,当前在数据量较大情况下,应避免 List 中对 ForEach 视图使用 id 修饰符。...虽然我们已经找到了导致进入列表视图卡顿原因,但如何在不影响效率情况下通过 scrollTo 来实现到列表端点滚动呢?...解决方案一 从 iOS 15 开始,SwiftUI 为 List 添加了更多定制选项,尤其是解除了对列表行分割线设置屏蔽且添加了官方实现。

9.1K20

探讨 SwiftUI几个关键属性包装

在这篇文章中,我们将探讨几个 SwiftUI 开发中经常使用且至关重要属性包装。本文旨在提供对这些属性包装主要功能和使用注意事项概述,而非详尽使用指南。...本文应几位朋友之邀而写,旨在帮助已经熟悉通用编程但对 SwiftUI 相对陌生开发者,快速理解这些属性包装核心作用和适用场景。...@State @State 是 SwiftUI 中最常用属性包装之一,主要用于视图内部管理私有数据。它特别适合存储值类型数据,如字符串、整数、枚举或结构体实例。...@State 不适合用于存储大量数据或复杂数据模型,这种情况下更适合使用 @StateObject 或其他状态管理方案。 属性包装本质上是一个结构体。...只必须响应实例属性变化视图中使用 @StateObject,如果仅需读取数据而不需要观察变化,可考虑其他选项

22610

SwiftUI 中实现视图居中若干种方法

欢迎大家 Discord 频道[2] 中进行更多地交流将某个视图视图中居中显示是一个常见需求,即使对于 SwiftUI 初学者来说这也并非难事。...那么 HStack、VStack 会在明确了所有固定尺寸子视图需求尺寸后,将所剩可用尺寸( HStack、VStack 视图给他们建议尺寸 - 固定尺寸子视图需求尺寸 )平均分配( 优先级相同情况下...Text 中心点与给定位置进行对齐( postion 是一个通过 CGPoint 来对齐中心点视图修饰 )当然,你也可以获取 Text Geometry 信息,通过 offset 或 padding...不过除非矩形尺寸明确,否则里外都需要使用 GeometryReader ,实现将过于烦琐。总结本文选取了一些有代表性解决方法,随着 SwiftUI 功能不断增强,会有越来越多手段可供使用。...我正以聊天室、Twitter、博客留言等讨论为灵感,从中选取有代表性问题和技巧制作成 Tips ,发布 Twitter 上。

6.7K40

使用 SwiftUI 创建一个灵活选择

前言 最近,我正在开发一个 Dribbble 上找到设计 SwiftUI 实现时,我想到了一个点子,可以通过一些酷炫筛选扩展该项目以缩小结果列表。...让我们来看看使用 SwiftUI 创建灵活选择实现! 可选择协议 选择最重要部分是,我们可以通过该视图组件选择一些所需选项。因此,首先创建了一个 Selectable 协议。...所有符合该协议对象必须实现两个属性:displayedName(选择中显示名称)和 isSelected(一个布尔值,指示特定选项是否已选择)。...总结 这篇文章介绍了如何使用 SwiftUI 构建一个灵活选择(FlexiblePicker),用于选择多个选项。...然后,详细介绍了实现该选择逻辑,包括如何处理选项布局、宽度和高度,以及如何处理用户与按钮交互。 最后,提供了一个简单视图实现,可以 SwiftUI 中使用该选择

26820

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

两种方案中,如果在数据量很大情况下,我更倾向于第一种方式,这样可以按需求读取数据。...因为这些使用并不有害,我们希望开发者因为使用了新编译版本而处理一堆警告。...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 中实现下面需求建议:打开一个窗口该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口视图中关闭一个窗口...对于可能造成卡顿图片数据,放弃从托管对象图片关系中直接获取方式。 Cell 视图中,通过创建 request 从私有上下文中提取数据并转换成图片。...我正以聊天室、Twitter、博客留言等讨论为灵感,从中选取有代表性问题和技巧制作成 Tips ,发布 Twitter 上。

14.8K30

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

数据流控制逻辑基本上推倒重写了 4 次,目前版本代码量完成更多功能、更加稳定并且每个 view 中数据都无需干预、动态更新情况下少了一半。...ScrollViewSwiftUI 中 ScrollView 沿袭了其他 SwiftUI 控件特点,使用起来非常轻巧,但几乎不提供额外控制选项。...模拟中 NavigationLink 只能使用一次,第二次点会失效,实机没有问题。很难实现直接返回到根视图,通过 dissmiss 只能返回到上层视图。...开发环境下 app 里云数据库中数据和 app store 下载 app 数据互通( 同一个 id ),开发时模拟数据也不能和实机数据云同步,必须在多个实机中才能测试。...但我一时头脑发热 app 已经进入了 review 情况下改动了资费数据,结果 app 被拒,而此时该资费便始终处于审核状态。

2.5K40

如何判断 ScrollView、List 是否正在滚动中

本文将介绍几种 SwiftUI 中获取当前滚动状态方法,每种方法都有各自优势和局限性。...: UIScrollView, willDecelerate decelerate: Bool)手指拖动结束后( 手指离开时 ),调用此方法 SwiftUI 中,很多视图控件是对 UIKit( AppKit...模式,因此无法有效地区分滚动是由那个控件造成方法三:PreferenceKey SwiftUI 中,子视图可以通过 preference 视图修饰向其祖先视图传递信息( PreferenceKey...preference 与 onChange 调用时机非常类似,只有值发生改变后才会传递数据 ScrollView、List 发生滚动时,它们内部视图位置也将发生改变。...我正以聊天室、Twitter、博客留言等讨论为灵感,从中选取有代表性问题和技巧制作成 Tips ,发布 Twitter 上。

3.7K40

Xcode 11 初体验

(本人是非常喜欢代码块,对于这个调整我要点赞 将Version Editor 中 log 选项卡移到了检查中,组成了新Source Control History区。...Editor Only:只显示代码编辑。 Editor and Canvas:代码编辑SwiftUI预览视图。 Editor and Assistant:代码编辑和辅助视图。...对网络和温度模拟 Xcode 11 还加入了对网络环境和设备温度模拟。这两个条件对开发者来说应该陌生,它们也是最难通过常规手段复现场景。...设备管理窗口中,现在增加了这几个选项 根据 Network Link 可以选择你需要状态,当然 Thermal status 可以选择!都可以让你 APP 更有预期状况下运行。...这样做有两个好处: 首先可以提高预览结果呈现速度 其次应用进入后台时,不会做一些额外操作,只会做一些必要操作,使应用快速进入睡眠状态,以节省耗电.

3.2K10

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

Core Data元素SwiftUI视图 预览 预览是模拟 预览是模拟,是一个高度优化且精简模拟。...预览Xcode中工作原理同标准模拟十分接近。但为了让它可以即时响应SwiftUI视图变化,苹果对其做出了不少修改。...通常此种情况下,会影响很多视图,甚至全部视图都不能预览。 用于修复标准模拟故障经验同样适用于排查预览故障 使用标准模拟进行程序调试时,我们会碰到由于模拟原因产生各种奇异状况。...•模拟设备管理中删除模拟再重新添加 上述手段,多数也都适用于修复某些情况下预览崩溃。...因此,通常推荐视图中直接获取或操作Core Data数据(非常简单应用除外)。

5.1K10

SwiftUI 视图生命周期研究

视图值树通常只保存当前布局、渲染所需内容(个别情况下,会缓存少数参与布局、渲染视图值), app 生命周期中,随着 State 变化而不断地变化。...尽管结构体构造函数中,我们可以使用特定属性包装(例如@State、@StateObject 等)声明依赖项,但我并不认为注册数据依赖工作是初始化阶段进行。...通常情况下SwiftUI 需要渲染屏幕某个区域或需要该区域数据配合布局时,会在视图值树上创建对应视图。当不再需要其参与布局或渲染时视图将被销毁。...比如在 List 和 LazyVStack 中,Cell 视图创建之后即使滚动出屏幕参与布局与渲染,但 SwiftUI 仍会保留这些视图数据,直到 List 或 LazyVStack 被销毁。...尤其 WWDC 2020 专题中已经明确告知应创建尽可能轻量化结构体构造后,开发者已经将很多原本构造中进行数据准备工作转移到了 onAppear 中进行。

4.4K30

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...但是,SwiftUI一些系统控件并没有完全遵循响应式设计原则,由此某些情况下会出现严重错误,影响用户体验,并使开发者无所适从。...它复现条件非常简单:真机上测试( 模拟上不容易复现 )点击 “GO” 按钮进入下一层视图点击 “Show Sheet” 按钮弹出 Sheet通过下滑手势取消 Sheet Sheet 取消后(动画结束时...它复现条件如下:iOS 16 系统,真机或模拟上测试点击视图列表中按钮,可以进入下一级视图。...AttributeGraph 是 SwiftUI 用于维护众多数据源与视图之间依赖关系工具。

631110

如何在 SwiftUI 中熟练使用 sensoryFeedback 修饰符

背景介绍 iOS 17 之前,如果你想要从 SwiftUI 视图中向用户提供触觉反馈,你会使用其中一个 UIKit(或 AppKit)反馈生成器。...请记住,最好使用预定义样式,并在超级自定义情况下自定义触觉反馈。根据触发值选择样式sensoryFeedback 视图修饰符另一种变体允许我们根据触发值选择特定反馈样式。....error : .success } } }}SwiftUI 还提供了触发值上定义条件选项,决定是否播放预定义反馈样式。...= nil}条件闭包接收监视触发旧值和新值。闭包中,返回一个布尔值,指示是否应播放反馈。使用反馈闭包触发要控制播放何种反馈,请使用视图修饰符反馈闭包版本。...对于触发处理也非常灵活,可以根据其条件选择不同反馈样式。总体而言,这个新视图修饰符为提高应用可访问性和用户体验提供了简便方式。使用时需谨慎,避免过多干扰用户。

10810

SwiftUI: 从 React 开发人员角度看 SwiftUI

最近我通过学习 SwiftUI 时,令我印象最深就是我对它熟悉程度,因为我已经 React 和 TypeScript上工作了几年了。...确实,有使用 React 库/框架和类型经验可以极大地加快我学习速度。我第一个SwiftUI代码对我过去 React 中构建东西感到非常陌生,而且我可以看到设计模式有很多重叠之处。...开发使用工具 macOS Big Sur Xcode 12.4 运行实例运行在 MacBook Pro (13-inch, M1, 2020) View 剖析 进入本主题核心之前,我想先介绍一下构成...不仅要知道 属性包装(property wrappers),视图(view)和视图修饰符(view modifiers)是什么,以及它们之间差异对于使用 SwiftUI 来说是必不可少,而且对于本文中我将要讨论某些事情...在下图中,您可以看到一个代码片段,其中包含一个基本 SwiftUI 视图以及一个视图修饰符和一个属性包装。 ?

2K40
领券