SwiftUI 可刷新永远不会消失

问题描述 投票:0回答:1

我在 SwiftUI 中的

.refreshable()
上使用
List
。使用以下代码,我在 iOS 17.4 模拟器中拉动刷新,微调器出现,然后在几秒钟后消失。

var body: some View {
  List() {
    // items ...
  }
  .refreshable { try? await Task.sleep(nanoseconds: 3_000_000_000) }
}

但是,当我将实际的刷新逻辑放入

refreshable
函数中时,旋转器不再消失,即使我的刷新函数完成时没有错误(我使用 Xcode 中的断点进行了验证)。相反,旋转器只会永远旋转。

var body: some View {
  List() {
    // items ...
  }
  .refreshable { await query.refetchAsync() }
}

query.refetchAsync()
触发在后台运行的重新获取
Task
,然后通过迭代
NotificationCenter.notifications()
返回的对象来等待更新:
self.client.queryUpdatesAsync()

如何修复这个错误?

ios swift swiftui
1个回答
0
投票
public func refetchAsync() async { self.refetch() for await update in self.client.queryUpdatesAsync() { if update.key != self.key { continue } switch self.dataStatus { case .idle, .pending: continue default: break } } }

中的

break
会破坏 switch,而不是 for 循环。要解决这个问题,您可以使用带标签的语句:
switch self.dataStatus {

© www.soinside.com 2019 - 2024. All rights reserved.