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

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

快速检索数组元素Q:为什么没有简单方法将 TABLE 选择行映射到提供表内容数组元素上?似乎唯一方法是在数组中搜索匹配 id 值,这对于大表来说似乎效率很低。...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...这个技巧对于处于屏幕顶部或底部视图十分有用。详情请参阅 推文[15] 。动画转场Q:为什么下面的代码没有显示动画转场。...Q&A ( 集锦 - 简体中文 )下文中问题来自开发者与苹果工程师在【 集锦 - 简体中文 】频道进行中文讨论( 没有出现在英文 SwiftUI 频道中 )。我直接对其进行了复制粘贴。.../[12] Swiftcord: https://github.com/SwiftcordApp/Swiftcord[13] 优化在 SwiftUI List 中显示大数据集响应效率: https:/

14.7K30

SwiftUI 与 Core Data —— 数据获取

这将有两个作用:数据变化后将引发与其绑定视图进行更新由于底层数据并不保存在视图中,因此在视图存续期中 SwiftUI 可以随时创建新视图描述实例而无需担心数据丢失虽然苹果没有公开 _makeProperty...方法具体细节,开发者无法自行向 SwiftUI 申请数据保存地址,但可以通过在自定义类型中( 符合 DynamicProperty 协议 )使用系统提供符合 DynamicProperty 协议类型...但如果在视图尚未加载或没有提供环境值( 例如忘记注入环境对象,没有提供正确视图上下文 )情况下访问环境数据,将引发应用崩溃。...数据( 因为 WrappedID 存在,我们可以很容易创建 mock 数据 )无论上述哪种方式,开发者都需放弃使用 SwiftUI 原生 Section 功能,在惰性容器中,根据提供附加数据自行对数据做分段显示处理...在下一篇文章中,我们将探讨如何在 SwiftUI 中安全地响应数据,如何避免因为数据意外丢失而导致行为异常以及应用崩溃。希望本文能够对你有所帮助。

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

探索 App Clips

例如点击Safari Banner调起App Clips,调起时会带一个URL过来,系统会根据调用URL来确定卡片显示数据,随后将数据例如标题、背景图等显示在App Clips的卡片页。...Clip Card只会显示一次,如果App Clips二进制没有被删除的话,之后就不会再重复显示。[563513413](https://jq.qq.com/?...配置App Clips时可以选择高级设置,在高级设置中可以多套标题和封面图。苹果会根据配置URL作区分,显示不同封面图。...下面是App Clips服务端配置JSON示例,做过Universal Link开发同学,对下面的JSON应该比较熟悉。...App Clips无法进行后台活动,目前看主要是后台网络请求。 ◆ ◆  ◆ 审核 App Clips是作为应用程序一部分参与审核,所以需要随客户端版本上线。

1.8K20

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

首先,导航到 VideoFeedView.swift 并在 SwiftUI 导入正下方添加以下导入: import AVKit 看看下面这个,你会看到你已经有了一个列表和一个视频数组。...这就是应用程序如何用数据填充现有列表方式。 视频本身来自嵌入在应用程序包中 JSON 文件。 如果您好奇,您可以查看 Video.swift 以了解它们是如何获取。...问题是你不能直接在 SwiftUI 中使用这个层。 毕竟 SwiftUI 没有 CALayer概念。 为此,您需要回到 UIKit。...当谈到“跟踪”播放器信息时,唯一途径就是使用键值观察(KVO)。 是的,这是 Apple 提出最奇怪 API 之一。 如果你小心,它是一种实时观察和响应状态变化强大方法。...缺点是,在撰写本文时,iOS 14.5是可用最新版本,VideoPlayer SwiftUI 视图未显示画中画按钮。

6.9K10

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

首先创建一个假设性需求: 一个可以展示数万条记录视图 从上个视图进入该视图时不应有明显延迟 可以一键到达数据顶部或底部且没有响应延迟 响应迟钝列表视图 通常会考虑采用如下步骤以实现上面的要求:...在 SwiftUI 视图生命周期研究[3] 一文中,我对 List 如何对子视图显示进行优化做了一定介绍。...除非没有其他选择,否则我并不推荐大家对 UIKit ( AppKit ) 控件进行重新包装,应使用尽可能微小侵入方式对 SwiftUI 原生控件进行补充和完善。...获取若干最新数据,将数据逆向添加入数组 在列表显示后率先移动到最底端(取消动画) 通过 refreshable 调用下一批数据,并继续逆向添加入数组 用类似的思路,还可以实现向下增量读取或者两端增量读取...总结 相较于 UIKit ,已经推出了 3 年 SwiftUI 仍有很多不足。但回首最初版本,现在我们已经可以实现太多以前无法想象功能。期盼 6 月 WWDC 会带来更多好消息。

9.1K20

如何让 SwiftUI 列表变得更加灵活

为了演示这种情况,我们在 List 中嵌套一个 ForEach (因为在 SwiftUI 中,列表变化一版都是由 ForEach 触发,而不是由 List 触发)。...然后,让我们使用另一个新功能,集合元素绑定,让系统自动为我们 articles 数组每个元素创建一个可变绑定: struct ArticleList: View { @ObservedObject...,即使我们应用程序在较旧操作系统版本上运行,也是没有问题。...很高兴地告诉你,今年 Apple 已经响应了这个请求,我们可以使用新 listRowSeparator 修饰符来完全隐藏不想呈现分隔符: struct ArticleList: View {...item 上调用,而不是在列表本身上调用,这为我们提供了很大灵活性,可以根据想要构建 UI 类型动态隐藏或显示每个分隔符。

4.8K41

SwiftUI 动画机制

这意味着,当数组中出现了两个同样元素(点击添加按钮),SwiftUI无法正确识别我们意图 —— 究竟是想对那个元素(值相同意味着标识也相同)进行操作。...List 里 item 指定 transition ,又一个没有在原始控件中很好兼容 SwiftUI 动画例子。...有关显性标识方面的内容可以参阅 优化在 SwiftUI List 中显示大数据集响应效率[8] 一文 遗憾与展望 理论上,一旦你掌握了 SwiftUI 动画机制,就应该能轻松地驾驭代码,自由地控制动画...尽管 UIViewRepresentableContext 已经为底层控件提供了动画控制所需 Transaction 信息,但是当前 SwiftUI 官方控件并没有对此进行响应。...List 中显示大数据集响应效率: https://www.fatbobman.com/posts/optimize_the_response_efficiency_of_List/ [9] ViewBuilder

14.6K40

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

例如,上面的代码,如果我们在 searchable 后面再添加一个onSubmt(of:.text), 将无法对 TextField commit 事件进行响应。...取消键盘 有些情况下,在用户输入完毕后,我们需要取消软键盘显示,以便留出更大显示空间。某些键盘类型并没有return按键,因此我们需要使用编程方式让键盘消失。...,通过 ToolbarItem 设置输入辅助视图目前还有以下不足: •显示内容受限高度固定,且无法利用辅助视图完整显示区域。...同其他类型 Toolbar 类似,SwiftUI 会干预内容排版。•无法对同一视图中多个 TextField 分别设定辅助视图在 ToolbarItem 中无法使用稍微复杂一点判断语法。...如果分别对不同 TextField 进行设定,SwiftUI 会将所有的内容合并起来显示。 目前 SwiftUI 对 toolbar 内容干预和处理有些过头。

13.1K10

用 Table 在 SwiftUI 下创建表格

例如:标题行与数据行( 首行 )重叠;标题行第一列不显示;滚动不顺畅以及某些表现( 行高 )与 macOS 版本不一致等情况。...image-20220620181923446 目前无法确定这种情况是有意设计还是 Bug 间隔与对齐 由于 Table 并非真正意义上网格布局容器,因此并没有提供行列间隔或行列对齐方面的设定。....red : .green) } 目前测试版 14A5228q ,当属性类型为 Bool 时,在该列上启用排序会导致应用无法编译 尽管在点击可排序列标题后,仅有一个列标题显示了排序方向,但事实上 Table...如果你在 Xcode 中编写使用 Table 代码,大概率会碰到自动提示无法工作情况。甚至还会出现应用程序无法编译,但没有明确错误提示( 错误发生在 Table 内部)。...出现上述问题主要原因是,苹果没有采用其他 SwiftUI 控件常用编写方式( 原生 SwiftUI 容器或包装 UIKit 控件),开创性地使用了 result builder 为 Table 编写了自己

3.9K30

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

它创建了值(如 Bool)与显示及修改这些值 UI 元素之间双向连接。 @Binding 不直接持有数据,而是提供了对其他数据源读写访问包装。...由于 @Binding 只是一个管道,它并不保证对应数据源在调用时必然存在。 开发者可以通过提供 get 和 set 方式来自定义 Binding。...UUID // 当 MyView 中 'items' 数组改变时,这里显示 UUID 会更新,展示了 @ObservedObject 动态切换能力...注意事项 在 iOS 13 中,由于没有提供 @StateObject ,此时 @ObservedObject 是唯一选择,可能会因为无法保证实例存续期而产生 意想不到结果[12],为了避免类似问题...选择正确工具对于构建高效、可维护 SwiftUI 应用是至关重要。正如在软件开发中经常提到没有一种工具是万能,但恰当地使用它们可以大大提高我们开发效率和应用质量。

20210

避免 SwiftUI 视图重复计算

如果视图响应了不该响应状态,或者视图状态中包含了不该包含成员,都可能造成 SwiftUI 对该视图进行不必要更新( 重复计算 ),当类似情况集中出现,将直接影响应交互响应,并产生卡顿状况。...)中将视图与该 Source of Truth 关联起来,让视图响应其变化( 当 SwiftUI 数据池中数据给出变化信号时,更新视图 )。...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应视图。 SwiftUI 上有一个困扰了不少人问题:为什么无法在视图构造函数中,更改 State 包装变量值?...比对结果仅能证明两个实例之间是否不同,但 SwiftUI 无法确定这种不同是否会导致 body 值发生变化,因此,它会无脑地对 body 进行求值。...让视图符合 Equatable 协议以自定义比对规则 也许由于某种原因,你无法采用上面的方法来优化构造参数,SwiftUI 还提供了另外一种通过调整比对规则方式用以实现相同结果。

9.2K81

Swift 周报 第三十期

周报精选 新闻和社区:码出新宇宙,WWDC23 就在眼前 提案:有 4 个提案通过,本期没有产生新提案 Swift 论坛:PermutableCollection 协议 推荐博文:SwiftUI 中...但是,也没有理由人为地限制开发人员在函数中创建模型复杂性。一些代码库(值得注意是,Swift 编译器本身)使用带有嵌套类型大型闭包,并且它们受益于使用协议抽象。...文章以示例结束,展示了如何使用这些技术来自定义一支蓝色铅笔或整套铅笔外观。...Swift 中动态成员查找[15] 摘要: 本文介绍了 Swift 语言中动态成员查找(Dynamic Member Lookup)特性。.../swift/2023/lineargradient-in-swiftui/ [15] Swift 中动态成员查找: https://swiftwithmajid.com/2023/05/23/dynamic-member-lookup-in-swift

21820

@State 研究

本文试图探讨并分析SwiftUI 中 @State实现方式和运行特征;最后提供了一个有关扩展@State功能思路及例程。读者需要对SwiftUI响应式编程有基本概念。...app响应出现了问题一方面肯定和我代码效率、数据结构设计欠佳有关;不过随着继续分析,发现其中也有很大部分原因来自SwiftUI中所使用响应实现方式。...但至少我们可以大概了解@State是如何让我们在视图中修改、绑定数据。 什么时候建立依赖? 我目前无法找到任何关于SwiftUI建立依赖更具体资料或实现线索。...虽然我们在MainView中使用@State声明了date,并且在MainView中修改了date值,但由于我们并没有在MainView中使用date值来进行显示或者判断,所以无论我们如何修改date...我们把@State换成了@ObservedObject ,同样在MainView中并没有显示store.date值或者用其来做判断,但是只要我们改变了store里date值,MainView便会刷新重绘

2.9K20

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

严格说 SwiftUI无法脱离 Combine ,但是 Combine 可以和其他各种框架进行结合。相较于声明式思想,响应式编程给我带来了更多震撼。...在最后 app 里面有接近一半显示控制其实都是在 UIKit 下完成,即使像 TextField 这样最基本需求,SwiftUI 原生版本有时都无法胜任。...在整个开发过程中我通过 feedback 汇报了十余处明显 bug,还有很多灵异现象由于无法使用简短例程重现我都没有办法汇报。...我 app 中有几处 Sheet 弹出响应就比较慢( 将 view 移出 sheet,使用 NavigationLink 调用显示就很好 ),尤其是退出时响应更慢。...@FetchRequest 目前只能在 init 中通过参数动态设置一次( 无法动态修改 ),如果需要显示不同谓词或排序结果,只能通过上层视图重新设置。

2.5K40

Android 工程师开发 iOS 是怎样体验?

正如标题所说:Android 工程师开发 iOS 是怎样体验?这篇文章我会为大家对比我在 Android 和 iOS 两端不同开发体验。...使用过之后,声明式 UI 真的很方便,而且 SwiftUI 和 JetPack Compose 以及 Flutter UI ,在语法上面也非常相似,有些人抱怨声明式 UI 代码写起来嵌套太多,很乱,我个人觉得这根本不是一个问题...,抽象和组合是一个程序员最基本需要具备职业素质,写之前仔细思考一个如何设计代码,很大程度上就能避免嵌套臃肿问题。...虽然我很喜欢声明式 UI,但写了这么久 SwiftUI 它目前缺陷也很明显,SwiftUI没有完全实现原有 UIKit 全部功能,如果 SwiftUI 没法实现,就需要自定义一个 UIKit...同时 SwiftUI 刚刚推出,很多最佳实践都没有,大部分人都在踩坑阶段,bug 很多,而且是无法解决 bug,我在 Github 上面开一个叫:SwiftUIBug 库,来记录目前为止我使用 SwiftUI

1.7K30
领券