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

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

对于苹果工程师给予建议有一点请注意,那就是如果有父视图中修改该环境对象实例需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型实例 )。...A:目前最好方法是建立一个导航状态模型对象,它持有导航状态规范表示,它可以为你正常和紧凑显示提供专门程序绑定。...使用它们应该只创建一个实例,然后可以子视图中读取。这应该不会增加内存使用( 如果有的话,请提出反馈 )。如果你向你模型对象追加越来越多数据,你可能会增加内存使用,这是很正常。...A:onAppear 和 task 都是我们第一次图上运行 body 之前调用。对于你用例,它们在行为上是等同。...从父视图通过环境值进行传递应该可以满足提问者当前需求:父视图可以传入新值,当前视图也可以视图范围内改变该值。总结我忽略掉了没有获得结论问题。希望上述整理能够对你有所帮助。

12.2K20

SwiftUI 4.0 全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈为管理对象新 API ,让开发者可以轻松实现编程式导航。本文将对新导航系统作以介绍。...⚠️ 使用堆栈管理系统情况下,请不要在编程式导航中混用声明式导航,这样会破坏当前视图堆栈数据 下面的代码,如果点击声明式导航,将导致堆栈数据重置。...分栏布局 SwiftUI 4.0 之前版本,可以这样使用 NavigationView 来创建拥有左右两个栏编程式导航视图: class MyStore: ObservableObject {...toolbar 背景色只有图上滚时才会显示。...相当一部分开发者由于版本适配原因并不会使用 API ,因此,每个人都需要认真考虑如下问题: 如何从新 API 中获得灵感 如何在老版本中运用编程式导航思想 如何让新老版本程序都能享受系统提供便利

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

我庆幸果断放弃了SwiftUI:它还不够成熟

我认真做了一番分析,并发现了几个问题。首先,由可选对象提供视图每次重绘时都是完全重新创建。我虽然通过缓存稍稍提升了性能表现,但实际体验仍然非常糟糕。...,终于能比较顺畅地操作地图上对象了,每秒帧率浮动一般就只有个位数。...但这会导致检查器中值出现延迟,因此地图编辑器交互过程中(比如使用移动工具时)结果不准确,所以效果还是称不上完美。 但我觉得这可能只是个独立问题,并不能因此把 SwiftUI 一棒子打死。...但上图展示效果其实是 AppKit 中完成,因为我 SwiftUI 一直实现不了预期功能。大家应该注意到了,中间 SpriteKit 视图上有三个按钮(分别是 +、200% 和 -)。...我刚开始以为是因为地图编辑器 SpriteKit 主视图仍在后台渲染。所以我尝试工作表显示出来后禁用渲染,但结果没有任何改变。 变更从一种环境传播至另一环境时,我也遇到了类似的延迟问题

4.9K20

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

如果你打算开发 iOS 17+ 应用,那么就应该马上抛弃 @ObservableObject 这样声明方式。 由于同一个系统中存在了两种不同数据源声明逻辑,这也初学者带来了更多困扰。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...转换为 SwiftData 代码,但目前问题还不少,当有多个选项,或属性类型为 transformable ,无法很好地应对 Model 原来设置 Index,目前无法转换(可生成对应代码,但 Attributed...开心还是无奈 今年 WWDC 中,苹果为 SwiftUI 带来了非常大变革,并推出了开发者向往已久 SwiftData。...对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

1.1K20

解析SwiftUI布局细节(三)地图基本操作

(点击地图位置会获取经纬度,反地理编译得到具体位置信息,显示列表中) SwiftUI怎样使用UIKit控件 ---- 我们来总结一下,SwiftUI怎么使用UIKit控件,中间连接就是...第二个方法是我们用来更新UIKit控件方法 理解前面加我们提关联类型,那我们第一个方法返回对象类型就是你要使用UIKit类型,第二个方法更新View也就是我们UIKit控件。...其实在我们使用UIKit时候如许多复用问题我们基本上都是通过写数据再Model里面去解决SwiftUI 也不例外。...地图使用 ---- 我们结合SwiftUI总结一下地图使用,这部分代码去Demo看比较有效果,地图我们使用 CoreLocation 框架,在这个 Demo 中我们使用关于 CoreLocation...其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;百度地图SDK国内(包括港澳台)使用是BD09坐标;海外地区,统一使用WGS84坐标。

2.1K10

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

如果你打算开发 iOS 17+ 应用,那么就应该马上抛弃 @ObservableObject 这样声明方式。 由于同一个系统中存在了两种不同数据源声明逻辑,这也初学者带来了更多困扰。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...转换为 SwiftData 代码,但目前问题还不少,当有多个选项,或属性类型为 transformable ,无法很好地应对 Model 原来设置 Index,目前无法转换(可生成对应代码,但 Attributed...开心还是无奈 今年 WWDC 中,苹果为 SwiftUI 带来了非常大变革,并推出了开发者向往已久 SwiftData。...对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

35010

SwiftUI使用UIKit视图

本文将通过对UITextField包装来讲解以下几点: •如何在SwiftUI使用UIKit视图•如何让你UIKit包装视图具有SwiftUI风格•SwiftUI使用UIKit视图需要注意地方...例如,UIKit中我们将一个代理对象附加到Text field视图上,当用户输入时,当用户按下return键时,该代理对象中对应方法将被调用。...协调器中,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式单项数据流等方式,将UIKit视图内部状态报告SwiftUI框架或其他需要模块...苹果对SwiftUI野心非常大,不仅为开发者带来了声明+响应式编程体验,同时苹果对SwiftUI跨设备、跨平台上(苹果生态)也做出了巨大投入了。...多数情况下,两种方式都能取得满意效果。不过用原生方法创建searchbar图上更灵活,同时支持使用LocalizedString作为placeholder。我个人会更倾向于使用组合方案。

8.1K20

SwiftUI使用 @EnvironmentObject 从环境中读取自定义值

SwiftUI环境使我们可以使用来自外部值,这对于读取Core Data上下文或视图展示模式等很有用。...这意味着,如果视图A是导航视图,则所有压入导航堆栈视图都可以访问同一环境。但是,如果视图A以工作表(sheet)形式显示视图B,则它们不会自动共享环境数据,因此我们需要手动发送。...向您展示一些代码之前,还有最后一件事:环境对象使用您已经学过ObservableObject协议,SwiftUI将自动确保共享同一环境对象所有视图更改时都会更新。...好,让我们看一些代码,这些代码展示了如何使用环境对象两个视图之间共享数据。...当然,我们可以单个视图中表示出来,但是通过这种方式,您可以确切地看到使用环境对象时通信无缝性。 现在,这是最聪明部分。

9.5K20

SwiftUI 与 Core Data —— 数据获取

通过新创建一个可以使用 Mock 数据 FetchRequest ,实现了 SwiftUI 与 Core Data —— 问题[6] 一文中提出可测试、可预览、可模块化目标。...创建自定义 DynamicProperty 类型时,需要注意以下几点:可以自定义类型中使用环境值或环境对象视图被加载后,视图中所有符合 DynamicProperty 协议类型也将一并具备访问环境数据能力...但如果在视图尚未加载或没有提供环境值( 例如忘记注入环境对象,没有提供正确图上下文 )情况下访问环境数据,将引发应用崩溃。...self 问题在订阅闭包中使用底层数据,如此就可以绕过无法结构体中引入 self 问题。...读取其数据必然会在惰性容器中使用多个 ForEach ,从而引发性能问题

4.6K30

打造可适配多平台 SwiftUI 应用

但是,如果开发者不能理解 SwiftUI 这个“限制”,并提前做一些准备工作,可能会为之后多平台开发工作带来一些隐患和增加不必要工作量。以“电影猎手” iPad 版本为例。...图片为了避免适配其他平台时重复调整代码,我们可以采用类似于 horizontalSizeClass 方式(通过环境变量),创建一个可用于所有需要适配平台自定义环境变量来解决这个问题。...这种做法不仅可以解决跨平台兼容性问题,还有其他好处:可以改善视图中代码整洁度(减少条件编译语句使用)可以改善 SwiftUI 不同版本之间兼容性当然,要创建并使用这类代码,前提是开发者必须已经对...盲目地使用这些解决兼容性代码可能会破坏 SwiftUI 创建者苦心,让开发者无法准确地体现不同平台特色。数据源聊完兼容性后,我们再聊另一个构建多平台应用初期容易忽略问题:数据源(数据依赖)。...当我们将“电影猎手”从 iPhone 移植到 iPad 或 Mac 上时,除了屏幕可用空间更大之外,另一个显着变化是使用者可以同时打开多个窗口,并可以不同窗口中对“电影猎手”进行独立操作。

3.1K80

打造可适配多平台 SwiftUI 应用

但是,如果开发者不能理解 SwiftUI 这个“限制”,并提前做一些准备工作,可能会为之后多平台开发工作带来一些隐患和增加不必要工作量。 以“电影猎手” iPad 版本为例。...image-20230416170832640 为了避免适配其他平台时重复调整代码,我们可以采用类似于 horizontalSizeClass 方式(通过环境变量),创建一个可用于所有需要适配平台自定义环境变量来解决这个问题...我们创建 deviceStatus 目的是用来观察当前应用窗口状态,故此必须应用于最宽处。 SwiftUI 中,除了环境值外,另一个具备较多平台“限制”部分就是视图 Modifier。...这种做法不仅可以解决跨平台兼容性问题,还有其他好处: 可以改善视图中代码整洁度(减少条件编译语句使用) 可以改善 SwiftUI 不同版本之间兼容性 当然,要创建并使用这类代码,前提是开发者必须已经对...当我们将“电影猎手”从 iPhone 移植到 iPad 或 Mac 上时,除了屏幕可用空间更大之外,另一个显着变化是使用者可以同时打开多个窗口,并可以不同窗口中对“电影猎手”进行独立操作。

2K10

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

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死这是一个 SwiftUI 所有版本中存在错误,你可以众多论坛或聊天室里看到不少开发者都在寻找解决方法。...如果我们认为问题出在这里,就需要使用编程式导航方式来调整代码。为了不影响用户使用习惯,我们禁用了 NavigationStack 自带 Back 按钮。...我们遇到问题两个场景中,应用程序都恰好使用导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使最新版本中,一些对 UIKit(AppKit)进行二次包装控件中,仍有不少细节处理不到位问题

589110

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

这样才可以使用SwiftUI创建新应用,充分利用visionOS中提供沉浸感。...在身临其境体验中,使用ARKit将你内容与人周围环境整合起来。 页面链接中探索新交互方式 人们可以通过看着一个元素并轻敲手指来选择它。他们还可以使用特定手势来缩放、拖动、缩放和旋转对象。...visionOS模拟器有一个虚拟背景作为你应用程序内容背景。使用键盘和鼠标或触控板环境导航并与应用程序交互。 点击并拖动应用程序内容下方窗口栏,以重新定位窗口环境位置。...如果指定了多个样式,则可以使用修饰符选择参数样式之间切换。 需要注意你使用混合风格沉浸式场景中包含了多少内容。...要显示您ImmersiveSpace场景,请使用openImmersiveSpace操作打开它,该操作从SwiftUI环境中获得。此操作异步运行,并使用提供信息来查找和初始化场景。

71040

SwiftUI 中创建自适应程序化导航方案

与 UIKit 使用命令式导航方式不同,SwiftUI 作为一个声明式框架,感知与设置两者之间是二位一体关系。读取状态即可获知当前导航位置,更改状态便可调整导航路径。...因此 SwiftUI 中,掌握两种导航容器状态表述差异是实现自适应导航方案关键。...栈中推送和弹出数据过程对应了导航容器中添加和移除视图操作。弹出全部数据相当于返回根视图,推送多个数据相当于一次性添加多个视图并直接跳转到最后数据所代表视图。...俗话说,有得必有失,暂时这种方式只能支持两列,尚未找到可以中间列中继续使用程序化导航方式。...最好以导航容器所在视图 sizeClass 作为判断标准。例如, Side 列视图中,无论在任何环境下,horizontalSizeClass 始终为 compact 。

4.2K30

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

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 这是一个 SwiftUI 所有版本中存在错误,你可以众多论坛或聊天室里看到不少开发者都在寻找解决方法。...如果我们认为问题出在这里,就需要使用编程式导航方式来调整代码。 为了不影响用户使用习惯,我们禁用了 NavigationStack 自带 Back 按钮。...我们遇到问题两个场景中,应用程序都恰好使用导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使最新版本中,一些对 UIKit(AppKit)进行二次包装控件中,仍有不少细节处理不到位问题

26720

SwiftUI TextField进阶——格式与校验

SwiftUI早期,这确实是十分有效手段。不过随着SwiftUI逐渐成熟,苹果为SwiftUIAPI提供了大量独有功能。如果仅为了某些需求而放弃使用官方SwiftUI方案有些得不偿失。...SwiftUI修饰方法) 以上原则,SheetKit——SwiftUI模态视图扩展库[3]和用NavigationViewKit增强SwiftUI导航视图[4]中均有体现。...可能屏蔽字符解决思路 •使用UITextFieldDelegatetextField方法•SwiftUI视图中,使用onChange录入发生变化时进行判断并修改 第一种思路,仍需使用Introspect...因此,采用这种思路,我们只能使用字符串作为绑定类型,将无法享受到SwiftUI构造方法带来便捷性。方案二采用了该思路。...其他需要注意问题 使用上面的思路进行实际编程前,我们还需要考虑其他几个问题: 本地化 本文提供演示代码[6]中实现了对Int和Double两种类型实时处理。

8.1K20

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

那么,SwiftUI解决了哪些痛点?带来哪些好处?代码风格如何?敬请阅读本文。 刚刚结束苹果WWDC推出了一个对于开发者非常重要框架:SwiftUI。...Swift是苹果最新开发语言,有人呼吁谷歌取代TensorFlowPython。目前TOIBE排名18位: ? RedMond排名11 ?...不需要我们特别去关心 SwiftUI带来了哪些好处?...感受一下SwiftUI代码风格 ? Github一个repo整理了WWDC 2019发布SwiftUI布局框架一些官方示例: SwiftUI Essentials 创建和组合视图: ?...使用SwiftUI之前要注意事情 首先,SwiftUI目前只支持10.15 beta以及更新macOS系统,当然10.15 beta已经是目前最新了。 其次一些可能出现问题也是需要注意

5.3K20

如何在 SwiftUI 中创建悬浮操作按钮

前言悬浮操作按钮(Floating Action Button, FAB)是一种 Android 和 Material Design 中使用 UI 元素。它用于触发特定屏幕主要操作。...以下是 Twitter 应用中悬浮操作按钮示例。Twitter App 最重要操作步骤,发布推文时使用悬浮操作按钮。如下图,右下角有一个蓝底中间有加号按钮。...以下是一个简单列表视图,嵌套在导航视图和选项卡视图中,列表中显示了 item 加索引内容。...将一个按钮放在内容视图上。这将在列表视图上添加一个加号图像按钮。示例运行截图如下:悬浮按钮位于屏幕右下角接着,是需要实现需求中第二步,使按钮与内容视图对齐到右下角。...希望本文内容对你 SwiftUI 开发中有所帮助,能够轻松地实现漂亮悬浮操作按钮,增强应用界面和用户交互体验。我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

7021
领券