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

在从Firestore收到阵列之前,SwiftUI array.isEmpty不会显示

在从Firestore收到阵列之前,SwiftUI的array.isEmpty属性不会显示。这是因为SwiftUI的视图是根据数据的变化来自动更新的,而Firestore的数据获取是异步的过程。当视图加载时,Firestore可能还没有返回数据,因此array.isEmpty属性仍然为true,直到数据返回并更新数组后,视图才会重新渲染。

为了解决这个问题,可以使用SwiftUI的@State属性包装数组,并在数据返回后手动更新该属性。具体步骤如下:

  1. 在视图的外部定义一个@State属性,用于包装数组。例如:@State var dataArray: [DataType] = []
  2. 在视图中使用该数组,例如:Text("(dataArray.isEmpty ? "数组为空" : "数组不为空")")
  3. 在适当的位置,例如在视图的onAppear方法中,调用Firestore的数据获取方法,并在获取到数据后更新dataArray属性。例如:
代码语言:txt
复制
.onAppear {
    FirestoreService.getData { result in
        switch result {
        case .success(let data):
            self.dataArray = data
        case .failure(let error):
            print("获取数据失败:\(error)")
        }
    }
}

在这个例子中,FirestoreService是一个自定义的服务类,其中的getData方法用于从Firestore获取数据。获取到数据后,通过更新dataArray属性来触发视图的重新渲染。

需要注意的是,这只是一个示例,实际情况中可能需要根据具体的业务逻辑进行相应的修改和调整。

推荐的腾讯云相关产品:腾讯云云数据库CDB、腾讯云云函数SCF、腾讯云云存储COS等。您可以通过访问腾讯云官方网站获取更多关于这些产品的详细信息和介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

一致性:这意味着Swift和Objective-C之间不会再看到奇怪的错误,或者非常旧的API与新API的混合 简洁:可以节省10%-20%的代码量 如果你刚刚接触SwiftUI,刚开始你可能需要适应一下...outlets和操作,都会在编译时进行检查,因此在运行时不会出现UI失败的风险 虽然背后使用来自UIKit和AppKit的控件,但SwiftUI凌驾于二者之上,能够有效地使底层UI框架成为一个实现细节,...感受一下SwiftUI的代码风格 ? Github一个repo整理了在WWDC 2019发布的SwiftUI布局框架的一些官方示例: SwiftUI Essentials 创建和组合视图: ?...使用SwiftUI之前要注意的事情 首先,SwiftUI目前只支持10.15 beta以及更新的macOS系统,当然10.15 beta已经是目前最新了。 其次一些可能出现的小问题也是需要注意的。...比如,它只支持Swift,你不能在Obj-C里使用SwiftUISwiftUI目前还不是很成熟,正在从事iOS开发的程序员可能更应该继续使用Obj-C,直到SwiftUI足够成熟。

5.4K20

SwiftUI 布局 —— 尺寸( 上 )

这类视图本身并不会参与布局,SwiftUI 的布局系统会在布局时自动将它们忽略,让其子视图与具备布局能力的祖先视图直接联系起来。...即使你对 Layout 协议不了解或短时间无法使用 SwiftUI 4.0 ,并不会影响你对下文的阅读和理解。...;如果建议高度小于单行显示的高度,则需求高度返回单行的显示高度 20.33;如果建议高度高于单行显示的高度且宽度大于单行显示的宽度,则需求高度返回单行显示的高度 20.33 …… 未指定模式 当两个维度均为未指定模式时...blue) .padding() } .border(.green) image-20220711134423997 视图尺寸已经是布局完成之后的产物了,在没有 Layout 协议之前...在撰写本文之前,我发了个 推文[5],询问大家对 fixedSize 的了解: image-20220711140418269 FW9GLjJVsAAmDXX Text("Hello world")

4.7K20
  • 掌握 SwiftUI 的 task 修饰器

    用 “出现之前” 来描述 onAppear 或 task 闭包的调用时机属于无奈之举。在不同的上下文中,“出现之前”会有不同的解释。...task(priority: .background) { // do something}任务优先级并不会影响创建任务所使用的线程task vs onChange另一个版本的 task 修饰器则提供了类似...task_longrun1_2022-08-07_09.07.44.2022-08-07 09_09_38我们的本意是通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭时结束任务 ),但在点击...)为了让之前的代码可以响应取消信号,我们需做如下调整:// 将while true {// 修改成 while !...作为一个事件源类型的 Source of Truth,每当接收到一个新的消息时,它都会导致 SwiftUI 对视图的 body 重新求值。

    2.2K30

    掌握 SwiftUI 的 task 修饰器

    用 “出现之前” 来描述 onAppear 或 task 闭包的调用时机属于无奈之举。在不同的上下文中,“出现之前”会有不同的解释。....task(priority: .background) { // do something } 任务优先级并不会影响创建任务所使用的线程 task vs onChange 另一个版本的 task...return false } } } } 图片 task 的生命周期 上文中的两段演示代码,即使算上网络延迟, task 闭包的运行持续时间也不会太长...图片 我们的本意是通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭时结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定的间隔时间...作为一个事件源类型的 Source of Truth,每当接收到一个新的消息时,它都会导致 SwiftUI 对视图的 body 重新求值。

    3.6K60

    onAppear 的调用时机

    本文将通过 SwiftUI 4 提供的新 API ,证明 onAppear 的调用时机是在布局之后、渲染之前。问题同之前多篇博客类似,我们还是从 聊天室 的一个 问题 开始。...创建实例、求值、布局、渲染在 SwiftUI 中,一个视图在它的生命周期中通常会经历四个阶段:创建实例视图树中,处于可显示分支的视图基本上都会经历的一个阶段。...在一个视图的生存期中,SwiftUI 可能会多次创建视图实例。由于惰性视图的优化机制,对于尚未处于可见区域的子视图,SwiftUI 不会创建其实例求值一个被显示的视图至少会经历一次的过程。...布局在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图向子视图提供建议尺寸,子视图返回需求尺寸这一过程,最终计算出完整的布局结果。...newWords.isEmpty { Text(getWord(at:0))}第二段代码对 List 进行求值由于 ForEach 会根据 newWords 的数量进行子视图的处理,因此尽管此时 newWords 为空,但也不会有问题完成布局调用

    2.1K20

    onAppear 的调用时机

    本文将通过 SwiftUI 4 提供的新 API ,证明 onAppear 的调用时机是在布局之后、渲染之前。 问题 同之前多篇博客类似,我们还是从 聊天室 的一个 问题开始。...创建实例、求值、布局、渲染 在 SwiftUI 中,一个视图在它的生命周期中通常会经历四个阶段: 创建实例 视图树中,处于可显示分支的视图基本上都会经历的一个阶段。...在一个视图的生存期中,SwiftUI 可能会多次创建视图实例。 由于惰性视图的优化机制,对于尚未处于可见区域的子视图,SwiftUI 不会创建其实例 求值 一个被显示的视图至少会经历一次的过程。...布局 在计算好当前需要显示的视图所有的视图值后,SwiftUI 将进入到布局阶段。通过父视图向子视图提供建议尺寸,子视图返回需求尺寸这一过程,最终计算出完整的布局结果。...Text(getWord(at:0)) } 第二段代码 对 List 进行求值 由于 ForEach 会根据 newWords 的数量进行子视图的处理,因此尽管此时 newWords 为空,但也不会有问题

    1.1K10

    协程 Flow 最佳实践 | 基于 Android 开发者峰会应用

    ;而一旦 Channel 没有正确关闭,生产者可能不会清理大型资源,因此 Channels 更容易造成资源泄漏。...我们利用 map 操作符来将一个 suspend lambda 表达式应用在从数据源接收到的每一个 Flow 的值上: /* Copyright 2019 Google LLC....不过,关闭这个特殊的 Flow 不会取消订阅。当使用 BroadcastChannel 的时候,您必须自己管理生命周期。...BroadcastChannel 实现 对于使用 Firestore 跟踪用户身份认证的数据流,我们使用了 BroadcastChannel API,因为我们希望注册一个有独立生命周期的 Authentication...您需要自己管理数据源的生命周期,并确保 BroadcastChannel 在测试开始之前已经启动,同时需要在测试结束后将其关闭,否则将会导致内存泄漏。

    3.5K11

    SwiftUI 视图的生命周期研究

    } }} 上面的代码将构建成如下的类型树: Group> 即使Text("Won't be rendered")永远都不会显示...但 SwiftUI 并非一定会从新的实例中获取 body 结果,如果之前的实例注册过数据依赖,视图值树仍可能会从原来的实例的 body 中获取结果。...当使用新实例时,SwiftUI 仍会将新的实例同原有的依赖项关联起来。 鉴于以上原因,注册视图依赖项的时机应该在初始化后,获得 body 结果之前。...比如,在下面的几个场景中,onAppear 和 onDisappear 都将违背大多数认知: •在 ZStack 中,即使视图不显示,也同样会触发 onAppear,即使消失(不显示),也不会触发 onDisappear...同理,将显示层切换为隐藏层后,该层仍参与布局,因此,ZStack 的所有层都会在最开始就触发 onAppear,但不会触发 onDisappear。

    4.4K30

    我们弃用 Firebase 了

    Firebase 实时数据库最初给人的感觉相当具有革命性,特别是在 WebSockets 被广泛接受或 Server-Sent Events 出现之前。...Firestore 的文档 / 集合架构:它迫使人们仔细考虑数据建模。它还反映了一个直观的导航方案。 Firestore 中的关系数据也是如此。...Firebase 套件可以帮助我们快速构建可扩展的原型,处理来自客户端的数据连接,在发布到生产环境之前强化安全规则,并对敏感逻辑使用 Firebase Functions。...我相信,谷歌不会介意开发人员放弃 Firebase 而单纯使用 GCP。 近期 Cloud Function 部署的速率限制 Cloud Function CI/CD 降级。...对于这个问题,K-Optional Software 几乎在同一时间收到了多个关于项目(不是我们的项目)的咨询请求,一切都表明,是 API 的突然变化造成了麻烦。

    32.6K30

    避免 SwiftUI 视图的重复计算

    self.number = 11 // 更改无效 } var body: some View { Text("\(number)") // 首次运行,显示...创建新实例 将新实例与 SwiftUI 当前使用的实例进行比对 如实例发生变化,用新实例替换当前实例,对实例的 body 求值,并用新的视图值替换老的视图值 视图的存续期不会因为实体的更替有所改变 由于...这是因为,我们将 Student 类型作为参数传递给了子视图,SwiftUI 在比对实例的时候,并不会关心子视图中具体使用了 student 中的哪个属性,只要 student 发生了变化,那么就会重新计算...sendID(_ id: Int) { self.selection = id } } 当点击某一个 CellView 视图的按钮后,所有的 CellView ( 当前 List 显示区域...当触发器接收到事件后,无论其是否更改当前视图的其他状态,当前的视图都会被更新。

    9.3K81

    3 名程序员被开除:因一次 APP 崩溃。。。

    之前从来没有与别人讲过这个尴尬的故事。 我现在从事的是第三份工作。在之前两份工作中,一次是我被解雇了,另一次是我主动辞职了。 但是被解雇对我来说是一次糟糕的经历。我哭了一整天。...我会建议所有的开发人员:如果你发现贵公司总是催你加班,却没有给予额外的好处,就要考虑换一份工作,因为工作场景可能不会发生变化。 傲慢的CTO派给我们太多的任务 CTO 派给我们整整一周的所有任务。...为了快速开发,我们使用了Firebase的Cloud Firestore来保存数据。当用户从移动前端将字符串数据而不是数字数据推送到Firestore时,应用程序崩溃了。...在向投资人展示该应用程序之前,他甚至试都没试过。他本该做好充分的准备,因为每个应用程序都有bug。而且如果你在一个半月内开发出一个项目,又没有进行测试,就会有很多bug。...但我永远不会忘记那份耻辱,我知道也许我不应该有那种感觉。但是这番经历仍然刺痛着我的心。 后记 人无完人,雇主们,请明白这一点。

    2.2K20

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

    然后根据它的焦点状态来定制它的显示样式。希望这对你的设计有用。自从 SwiftUI 3.0 提供了 safeAreaInset 视图修饰器之后,实现问题中的案例将不再是难事。...对于苹果工程师给予的建议有一点请注意,那就是如果有在父视图中修改该环境对象实例的需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型的实例 )。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,在详细视图中显示一条信息,如果折叠,则显示一个警告或其他指示 )。...换句话说,如果我写 Color.green.task { self.someState += } ,是否能保证在视图第一次出现之前状态一定会改变?...A:onAppear 和 task 都是在我们第一次在视图上运行 body 之前调用的。对于你的用例,它们在行为上是等同的。

    12.2K20

    TCA - SwiftUI 的救星?(一)

    如果我们需要一种新架构,那去前端那边抄一下大抵是不会错的。结合 SwiftUI 的特点,Elm[9] 就是非常优秀的”抄袭“对象。 说实话,要是你现在正好想要学习一门语言,那我想推荐的就是 Elm。...TCA 中 Reducer 上有一个非常方便的 debug() 方法,它会为这个 Reducer 开启控制台的调试输出,打印出接收到的 Action 以及其中 State 的变化。...如果接收到 Action 后产生的新的 model 状态和提供的 model 状态不符,那么测试失败。...因此,如果我们的 View 持有的只是切分后的 Store,那么原始 Store 其他部分的变更,就不会影响到当前这个 Store 的切片,从而保证那些和当前 UI 不相关的状态改变,不会导致当前 UI...为数据文本添加颜色 为了更好地看清数字的正负,请为数字加上颜色[13]:正数时用绿色显示,负数时用红色显示。 添加一个 Reset 按钮 除了加和减以外,添加一个重置按钮,按下后将数字复原为 0。

    3.2K30

    SwiftUI 4.0 的全新导航系统

    基于类型的响应式目标视图处理机制 比如下面的代码是在老版本( 4.0 之前SwiftUI 中使用编程式跳转的一种方式: struct NavigationViewDemo: View { @...分栏布局 在 SwiftUI 4.0 之前的版本,可以这样使用 NavigationView 来创建拥有左右两个栏的编程式导航视图: class MyStore: ObservableObject {...动态控制多栏显示状态 另一个之前困扰多栏 NavigationView 的问题就是,无法通过编程的手段动态地控制多栏显示状态。...,例如,在 macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我在 用 NavigationViewKit 增强 SwiftUI 的导航视图...定制 NavigationLink 样式 在之前版本的 SwiftUI 中,NavigationLink 其实一直都是作为一种特殊的 Button 存在的。

    10.3K62

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

    每当您将其设置为非 nil 值时,就会显示全屏封面的内容。...如果您查看之前使用的 videoURL 计算属性,您会发现它首先查找 remoteVideoURL。 如果没有找到,您将获得 localVideoURL。...每次收到通知时,您都会知道播放器已进入下一个视频。 要在 Swift 中使用 KVO——比在 Objective-C 中好得多——你需要保留对观察者的引用。...如果你反过来做,双击监听器将永远不会被调用。 再次构建并运行,您将能够点击和双击来播放剪辑的速度和音量。 这表明添加自定义控件以与自定义视频视图交互是多么容易。...您会在左上角看到画中画按钮……否则不会! 缺点是,在撰写本文时,iOS 14.5是可用的最新版本,VideoPlayer 的 SwiftUI 视图未显示画中画按钮。

    7K10

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

    阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...Swiftcord[12] 的代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集的响应效率[13] 一文,了解苹果工程师推荐的方法。...但是,此转换仅在文本字段完成编辑时才会发生,并且不会阻止输入非数字字符。目前 SwiftUI 没有 API 可以限制用户在字段中输入的字符。...解决了之前的一大遗憾。如此一来,边栏视图的样式自由度获得了极大的提高。...这种 “软弃用” 的 API 不会在代码自动补全中提供,而且通常处在文档中单独的一个部分。但编译器不会对现有的使用发出警告。

    14.8K30
    领券