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

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

contextMenu_2022-10-26_14.01.21.2022-10-26 14_02_29如何对 @State 变量进行测试Q:对于测试 SwiftUI图中 @State 变量是否有推荐方式...阅读 SwiftUI 动画机制[8] 一文,了解更多有关动画内容。自适应高度 SheetQ:如何在 iOS16 中呈现与动态内容高度相匹配 Sheet?...只允许打开该内容类型文件,但不能进行编辑。MVVMQ: UIKit 时代,MVVM 是一种常见架构,视图显示数据来自一个单独 viewModel 类。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,详细视图中显示一条信息,如果折叠,则显示一个警告或其他指示 )。...构造函数中初始化 @StateObjectQ:是否有办法图中用该视图结构参数初始化一个 @StateObject ?A:可以通过 init 方法中手动初始化 @StateObject 来实现。

12.2K20

避免 SwiftUI 视图重复计算

通常我们会将这种多余计算行为称之为过度计算或重复计算。本文将介绍如何减少( 甚至避免 )类似的情况发生,从而改善 SwiftUI 应用整体表现。...当 SwiftUI 将视图加载到视图树时,通过调用 _makeProperty 完成将数据保存到托管数据池以及属性图中创建关联操作,并将数据托管数据池中引用保存在 _location ( AnyLocation...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应视图。 SwiftUI 上有一个困扰了不少人问题:为什么无法视图构造函数中,更改 State 包装变量值?...例如:当 SwiftUI 更新 ContentView 时,如果 SubView 构造参数( name 、age )内容发生了变化,SwiftUI 会对 SubView body 重新求值(...会在主线程上运行触发器闭包,如果闭包中操作比较昂贵,可以考虑将闭包发送到后台队列 总结 本文介绍了一些 SwiftUI如何避免造成视图重复计算技巧,除了从中查找是否有能解决你当前问题方法外

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

一段因 @State 注入机制所产生“灵异代码”

问题构成尽管看起来有些奇怪,但 Text 添加与否,确实将影响 Sheet 视图中显示内容。...State 注入优化机制 SwiftUI 中,对于引用类型,开发者可以通过 @StateObject、@ObservedObject 或 @EnvironmentObject 将其注入到视图中。...与大多数 View Extension 和 ViewModifier 不同,图中,通过 .sheet 或 .fullScreenCover来声明模态视图内容代码闭包,只会在显示模态视图时候才会被调用...,只有模态视图进行显示时,SwiftUI 才执行 .sheet 闭包中函数,创建 Sheet 视图。....id(n) .onChange(of:n){_ in } // id 或 onChange 均可以不添加显示内容情况下,创建关联在 创建自适应高度 Sheet 推文[4] 中,我便使用过 id

1.9K20

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

因此,如果你正在创建一个视图来显示可滚动内容,并可能进行选择操作,那么 iOS 和 macOS 上使用 List 将有最好体验。...Table 中上下文菜单Q:如果我 TABLE 上添加了一个上下文菜单,我如何确定哪一行导致了菜单显示(无需选择该行)?...Swiftcord[12] 代码展示了如何SwiftUI 下实现倒置列表。阅读 优化 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...macOS APIQ:对于运行 Monterey Mac,能否如何SwiftUI 中实现下面需求建议:打开一个窗口该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口图中关闭一个窗口...我当前设法一个标注 @ToolbarContentBuilder 函数中单独提取 toolbar 内容,是否有好方法来提取掉大量 shee 和 alert 中代码。

14.7K30

掌握 SwiftUI task 修饰器

欢迎大家 Discord 频道[2] 中进行更多地交流随着 Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者图中使用基于...因此,开发者应避免将一些会对性能造成影响操作放置视图类型构造函数之中,而是 onAppear 或 task 中进行该类型操作。...,每秒更新一次 date 变量,并且控制台中显示当前任务 ID 及时间。...app 无法响应是由于当前 task 是主线程上运行,如果按照下文中方法将 task 运行在后台线程之中,那么 app 将可以继续响应,但会在不显示日期文字情况下,继续更新 date 变量,并且会在控制台持续输出...,让开发者可以图中高效地构建复杂异步任务。

2.2K30

SwiftUI中使用UIKit视图

本文将通过对UITextField包装来讲解以下几点: •如何SwiftUI中使用UIKit视图•如何让你UIKit包装视图具有SwiftUI风格•SwiftUI使用UIKit视图需要注意地方...•处理UIKit视图中复杂逻辑UIKit开发中,通常会将业务逻辑放置UIViewController中,SwiftUI没有Controller这个概念,视图仅是状态呈现。...右侧预览中,我们可以看到placeholder可以正常显示,如果你在其中输入文字,表现状态也同TextField完全一致。...如果按照TextField正常行为,当我们在其中输入任何文本时,下方Text中应该显示出对应内容,不过我们当前代码版本中,并没有表现出预期行为。...因此我们需要创建协调器,并在协调器中实现该方法,将录入内容传递给Demo视图中name变量。

8.1K20

掌握 SwiftUI task 修饰器

随着 Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者图中使用基于 async/await 异步代码。...因此,开发者应避免将一些会对性能造成影响操作放置视图类型构造函数之中,而是 onAppear 或 task 中进行该类型操作。...图片 我们本意是通过按钮来开启和关闭计时器显示以控制任务生命周期( 关闭时结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定间隔时间...app 无法响应是由于当前 task 是主线程上运行,如果按照下文中方法将 task 运行在后台线程之中,那么 app 将可以继续响应,但会在不显示日期文字情况下,继续更新 date 变量,并且会在控制台持续输出...,让开发者可以图中高效地构建复杂异步任务。

3.5K60

TCA - SwiftUI 救星?(一)

Elm 中某种机制将捕获到这个消息。 检测到新消息到来时,它会和当前 Model 一并,作为输入传递给 update 函数。...Elm 运行时负责得到新 Model 后调用 view 函数,渲染出结果 ( Elm 语境下,就是一个前端 HTML 页面)。用户可以通过它再次发送新消息,重复上面的循环。...Reducer,Store 和 WithViewStore 是 TCA 中类型: Reducer 是函数式编程中常见概念,顾名思意,它将多项内容进行合并,最后返回单个结果。...这个函数返回值是一个 Effect,它代表不应该在 reducer 中进行副作用,比如 API 请求,获取当前时间等。我们会在下一篇文章中看到这部分内容。... SwiftUI 中,body 刷新是 SwiftUI 运行时通过 @ObservedObject 属性包装所提供特性。现在这部分内容被包含在了 WithViewStore 中。

3.2K30

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

如何在Xcode下预览含有Core Data元素SwiftUI视图 从SwiftUI诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨功能。...结合两年来我SwiftUI中使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...预览模拟器不支持控制台输出显示、不支持断点调试,即使动态预览模式下(支持交互预览模式),我们也不会在Xcode中获得任何代码中控制台输出内容。因此预览发生问题时,用于排查故障手段很有限。...可以预览视图中看到对应UUID目录名(必须在动态预览模式下才会显示)。 image-20210827150544279 通过清空对应目录,即可完成上面的1、4、5项。...由于前文中提到SwiftUI App life cycle独特性,你无法根视图中使用单例来注入持久化上下文。

5.1K10

SwiftUI内容边距

前言SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中安全区域。许多情况下,安全区域是你希望放置内容地方。...幸运是,SwiftUI 引入了新 contentMargins 视图修饰符,使我们能够图中移动特定类型内容。...根据水平尺寸类别的不同(正常或紧凑),我们使用 contentMargins 视图修饰符来管理水平方向上内容边距。紧凑水平尺寸类别下,我们将内容移动了 200 个点,以便在大屏幕设备上居中显示。...文章从创建示例开始,展示了列表视图中如何处理内容边距问题。...最后,引入了 contentMargins 视图修饰符,并详细解释了其用法和参数,以及如何使用它来管理内容边距。通过本文,读者可以更好地理解并掌握 SwiftUI内容边距管理技巧。

12132

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

你也可以图中添加SwiftUI手势识别器来处理点击、长按、拖动、旋转和缩放手势。...系统将每个窗口放置初始位置,并根据与应用程序进一步交互更新该位置。 将3D内容添加到应用程序中 为您visionOS应用程序添加深度和维度,并发现如何将您应用程序内容融入人周围环境。...在为visionOS构建应用程序时,请考虑如何为应用程序界面添加深度。该系统提供了几种显示3D内容方法,包括现有窗口中,卷中以及沉浸式空间中。选择最适合你应用和你提供内容选项。...当你准备界面中显示3D内容时,使用RealityView。这个SwiftUI视图作为你RealityKit内容容器,并允许你使用熟悉SwiftUI技术更新内容。...当指定手势发生在实体上时,SwiftUI执行提供闭包。 下面的示例将一个点击手势识别器添加到上一个示例中球体视图中

73340

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

SwiftUI 3.0 中,苹果为开发者提供了一个远好于预期解决方案,同 onSubmit 类似,可以从更高视图层次来统一对视图中 TextField 进行焦点判断和管理。...这些都是使用textContentType得到效果。 通过给 TextField 设定 UITextContentType,系统输入时智能地推断出可能想要录入内容,并显示提示。...同其他类型 Toolbar 类似,SwiftUI 会干预内容排版。•无法对同一视图中多个 TextField 分别设定辅助视图 ToolbarItem 中无法使用稍微复杂一点判断语法。...如果分别对不同 TextField 进行设定,SwiftUI 会将所有的内容合并起来显示。 目前 SwiftUI 对 toolbar 内容干预和处理有些过头。...相信再有 2-3 年,SwiftUI 主要控件原生功能就可以比肩对应 UIKit 控件了。 关于如何对 TextField 显示做更多定制,之后会撰文探讨。 希望本文对你有所帮助。

13.1K10

SwiftUI 布局 —— 尺寸( 上 )

但由于 SwiftUI 视图并没有提供尺寸这一属性,因此即使 SwiftUI 诞生了数年后今天,如何获取视图尺寸仍然是网络上热门问题。...,当前容器父视图将使用该尺寸内部进行摆放 return cache.cropBounds.size } 根据建议尺寸内容不同,我们可以将建议尺寸细分为四种建议模式, SwiftUI...SwiftUI 没有提供可以图中直接处理渲染尺寸方式( 除了 Layout 协议 ),通常我们会通过对建议尺寸以及需求尺寸调整,来影响渲染尺寸。...视图尺寸 视图渲染后屏幕上呈现尺寸,也是热门提问 —— 如何获取视图尺寸中所指尺寸。 图中可以通过 GeometryReader 获取特定视图尺寸及位置。...例如在上文中,SwiftUI 为所有的 Shape 设置默认理想尺寸为 10 x 10 ,Text 默认理想尺寸为单行完整显示全部内容所需尺寸。

4.7K20

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

欢迎大家 Discord 频道[2] 中进行更多地交流将某个视图父视图中居中显示是一个常见需求,即使对于 SwiftUI 初学者来说这也并非难事。...需求实现下图中展示样式:彩色矩形视图中居中显示单行 Textimage-20220829142518962填充物Spacer最常见也是最容易想到解决方案。...万变不离其宗,掌握了 SwiftUI 布局原理,无论需求如何变化都可轻松应对。...我为本文这种通过多种方法来解决一个问题方式添加了【小题大作】标签,目前使用该便签文章还有: Core Data 中查询和使用 count 若干方法[6]、 SwiftUI图中打开 URL.../[7] SwiftUI图中打开 URL 若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI/[8] Twitter: https

6.6K40

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

本文我将用如下图中一个例子来展示如何设置点按弹窗。下图中程序功能很简单:长按这句名言后,会出现点按弹窗,你可以点击复制按钮将这句话复制到系统剪贴板中。 ? 试想你是一名美术,完全不了解程序。...开个玩笑,我们还缺一步,把这段文字翻译成 SwiftUI 写法就行了。 透过 SwiftUI 语法了解如何设置点按弹窗 这个功能全部实现代码如下,我会在下文中逐步讲解每一段代码用途。 ?...纵向排列 View SwiftUI 里叫做 VStack,它用一个花括号 {包住里面的内容};而文字 View SwiftUI 里叫做 Text。...中文里圆括号中各种要求,正是 SwiftUI各种修改器,语法结构是 「.修改器名字」。比如下图中我们想修改为小标题字体,就写 .font(.headline)。 ?...若你想仔细学习 SwiftUI 和苹果或安卓应用程序开发,欢迎文末写下你想学习内容,我会参考写文。

2.1K40

SwiftUI属性包装器如何处理结构体

已经了解了 SwiftUI 如何通过使用 @State 属性包装器将变化数据存储结构体中,如何使用 $ 将状态绑定到UI控件值,以及更改 @state 包装属性时是如何自动让 SwiftUI 重新调用我们结构体...,但是您不会看到我们 print() 语句被触发——实际上,什么都不会输出。...之前我曾解释说,我们无法图中修改属性,因为它们是结构体,因此是固定。但是,现在您知道 @State 本身会生成一个结构体,因此我们面临一个难题:如何修改该结构体?...现在将其激活,然后输入 "State"——希望第一个结果在其下方显示 SwiftUI,但如果没有,请找到并选择它。...在后台,它将值发送给SwiftUI以便存储可以自由修改位置,因此,结构体本身永不改变。

1.7K10

@State 研究

每当视图创建或解析时,都会为该视图和与该视图中使用状态数据之间创建一个依赖关系,每当状态信息发生变化时,有依赖关系视图则会马上反应出这些变化并重绘。...@State如何工作 分析@State如何工作之前,我们需要先了解几个知识点 属性包装器 作为swift 5.1新增功能之一,属性包装器管理属性如何存储和定义属性代码之间添加了一个分割层。...但至少我们可以大概了解@State是如何让我们图中修改、绑定数据。 什么时候建立依赖? 我目前无法找到任何关于SwiftUI建立依赖更具体资料或实现线索。...虽然我们MainView中使用@State声明了date,并且MainView中修改了date值,但由于我们并没有MainView中使用date值来进行显示或者判断,所以无论我们如何修改date...{print($0)}) var name//每次赋值后(包括通过Binding修改)执行 toAction 定义函数 接下来?

2.9K20

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

开始 首先看下主要内容本教程中,您将了解如何SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行iOS应用程序,来自翻译。...Data Sources组中,有用于保存或加载数据辅助函数。 如果您喜欢WaypointModule组中查看前面的内容。它有一个Waypoint编辑屏幕VIPER实现。...路由器Router处理屏幕之间导航。这与SwiftUI不同,SwiftUI中,视图显示任何新视图。...---- Defining an Entity VIPER是这种架构一个有趣缩写,但它顺序不是禁止屏幕上显示内容最快方法是从实体entity开始。entity是项目的数据对象。...SwiftUI将所有目标视图声明为当前视图一部分,并根据视图状态显示它们。

17.4K10

SwiftUI 动画机制

开发者经常需要面对:如何动、怎么动、什么能动、为什么不动、为什么这么动、如何不让它动等等困扰。对 SwiftUI 动画处理逻辑了解不够深入是造成上述困扰主要原因。...无论是修饰符 animation 还是全局函数 withAnimation ,实际上都是图中声明 Transaction 快捷方法,内部分别对应着 transaction 和 withTransaction...因此有很大可能因为对视图识别错误,而产生动画异常。下面的动图中,当出现相同元素时,SwiftUI 给出了警告提示。...有关显性标识方面的内容可以参阅 优化 SwiftUI List 中显示大数据集响应效率[8] 一文 遗憾与展望 理论上,一旦你掌握了 SwiftUI 动画机制,就应该能轻松地驾驭代码,自由地控制动画... ViewBuilder 研究(下) —— 从模仿中学习[9] 一文中,我们展示了 SwiftUI Text 是如何处理它扩展方法

14.6K40

如何SwiftUI图中显示应用图标和版本

本文中,我将展示如何创建一个可访问 SwiftUI 视图,既能显示应用图标和版本,又能在各种文本大小和外观下看起来都很好:获取应用图标构建视图第一步是从主包中获取应用图标。...创建 SwiftUI 视图现在让我们将所有内容结合起来,创建一个 SwiftUI 视图,显示应用图标和版本:AppVersionInformationView.swiftimport SwiftUIstruct...这些值通过我们之前创建提供者传递给视图。我们一个水平堆栈中显示应用图标和版本,间距为12点。我们 Image 视图中显示应用图标。...但是,应用图标只能作为命名 UIImage 检索,所以我们需要先创建 UIImage,然后再转换为 SwiftUI Image。我们一个垂直堆栈中显示应用版本,包括一个标签和应用版本字符串。...获取到应用图标和版本信息后,我们创建了一个 SwiftUI 视图来展示这些信息。该视图使用水平堆栈(HStack)布局,将应用图标和版本信息并排显示

11222
领券