我不确定我是否正确使用了它,但情况如下:

我有一个观点:

struct TimerView: View {
    @State private var numberOfVideos: Int
    @State private var time = ""
    private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

    init(numberOfVideos: Int) {
        _numberOfVideos = State(initialValue: numberOfVideos)
    }

    var body: some View {
        Text(time)
            .onReceive(timer) { _ in
                // it is called every second
                time = "00:00"
            }
        ReportView(numberOfVideos: $numberOfVideos)
    }
}

struct ReportView: View {
    @Binding private var numberOfVideos: Int
    init(numberOfVideos: Binding<Int>) {
        // ❌ this is called every second, I don't want it.
        self._numberOfVideos = numberOfVideos
    }

    var body: some View {
        Text(String(numberOfVideos))
    }
}

用途:

TimerView(numberOfVideos: 5)

每秒实例化ReportView个,这不是我需要的.我怎么才能解决这个问题呢?

推荐答案

在单独的视图中突出移动计时器逻辑,如下所示:

struct TimerView: View {
    @State private var numberOfVideos: Int
    @State private var time = ""

    init(numberOfVideos: Int) {
        _numberOfVideos = State(initialValue: numberOfVideos)
    }

    var body: some View {
        TimeText(text: $time)
        ReportView(numberOfVideos: $numberOfVideos)
            // .background(.debug)
    }
}

struct ReportView: View {
    @Binding private var numberOfVideos: Int
    init(numberOfVideos: Binding<Int>) {
        // ❌ this is called every second, I dont want it.
        self._numberOfVideos = numberOfVideos
    }

    var body: some View {
        Text(String(numberOfVideos))
    }
}

struct TimeText: View {
    @Binding var text: String
    private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    
    var body: some View {
        Text(text)
            .onReceive(timer) { t in
                // it is called every second
                text = t.debugDescription
            }
    }
}

Ios相关问答推荐

有没有办法观察滚动的SwiftUI图表的内容偏移量?

如何将Safari调试器附加到Turbo-iOS原生应用中的模拟器

围绕对象旋转和移动相机不起作用Swift SceneKit

SwiftData在获取值时应用程序崩溃:线程1:EXC_BREAKPOINT(代码=1,子代码=0x101e8303c)

iphone 11 和 iphone 12 对于相同的布局显示不同的结果

更改订单时如何保存商品的位置?

为什么 Swift 不在启动的同一线程上恢复异步函数?

如何擦除 Swift 中的 Core Graphics Context 绘图?

SwiftUI 解除 .alert 弹出 NavigationView

类型任何视图不能符合具有泛型的协议上的视图

如何在 Swift 中从另一个视图控制器将元素附加到数组中

ios 崩溃 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

在 Grand Central Dispatch 中使用 dispatch_sync

是否可以在 iOS 9 上让您的 iPad 应用退出多任务处理?

UIButton 事件.有什么不同?

IOS - 从 UITextView 中删除所有填充

为什么 Xcode 4 不创建任何产品?

CoreBluetooth 应用程序到底能在后台做什么?

Xcode 5 和 iOS 7:架构和有效架构

类 AMSupportURLConnectionDelegate 在两者中都实现