You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何实现变量每1秒/10秒自动更新随机数组值

SwiftUI 实现定时切换 Banner 视图

要实现每隔指定时间自动切换 Banner,你需要利用 SwiftUI 的状态变量和定时器触发视图更新,具体实现如下:

1. 将常量替换为状态变量

原来的 randarrBanner 是不可变常量,无法触发视图刷新。改用 @State 修饰变量,让 SwiftUI 监听其变化:

let bannerAdArray = [1, 2]
@State private var currentBannerIndex = bannerAdArray.randomElement() ?? 1 // 初始随机值,空数组时默认取1

2. 添加定时器并绑定更新逻辑

使用 Timer.TimerPublisher 创建定时任务,每隔指定时间(比如10秒)更新 currentBannerIndex 的值:

import Combine // 需要引入Combine框架

struct YourView: View {
    let bannerAdArray = [1, 2]
    @State private var currentBannerIndex = bannerAdArray.randomElement() ?? 1
    @State private var timerCancellable: AnyCancellable? // 管理定时器生命周期
    
    var body: some View {
        VStack {
            // 根据当前索引渲染对应Banner
            if currentBannerIndex == 1 {
                YandexBanner()
                    .frame(width: 360, height: 50)
            } else if currentBannerIndex == 2 {
                MyTargetBanner()
                    .frame(width: 360, height: 50)
            }
        }
        .onAppear {
            // 启动定时器,每10秒触发一次
            timerCancellable = Timer.publish(every: 10, on: .main, in: .common)
                .autoconnect()
                .sink { [weak self] _ in
                    // 更新随机索引,用weak self避免循环引用
                    self?.currentBannerIndex = self?.bannerAdArray.randomElement() ?? 1
                }
        }
        .onDisappear {
            // 页面消失时取消定时器,防止内存泄漏
            timerCancellable?.cancel()
        }
    }
}

关键说明

  • @State 变量:变量值改变时,SwiftUI 会自动重新计算视图 body,实现 Banner 切换。
  • 定时器管理:用 AnyCancellable 持有定时器,页面消失时取消,避免不必要的资源消耗。
  • 安全取值:?? 1 处理数组为空的边界情况,让代码更健壮。

如果需要切换时间为1秒,只需把 Timer.publish(every: 10) 改成 every: 1 即可。

内容的提问来源于stack exchange,提问作者avldokuchaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:02:06