Swiftui 每隔几秒钟将borderStroke更改为随机颜色

Swiftui 每隔几秒钟将borderStroke更改为随机颜色,swiftui,Swiftui,我正在学习SwiftUI,并尝试设置我的圆圈的笔划边界,使其在数组中每隔2秒随机更改颜色。我尝试了randomElement(),因为在过去的示例中,我使用它来设置随机背景颜色。只是被卡住了,希望能得到指导 import SwiftUI import Combine let redBorder = Color(red: 255/255, green: 0/255, blue: 0/255, opacity: 1) let orangeBorder = Color(red: 255/255, g

我正在学习SwiftUI,并尝试设置我的圆圈的笔划边界,使其在数组中每隔2秒随机更改颜色。我尝试了randomElement(),因为在过去的示例中,我使用它来设置随机背景颜色。只是被卡住了,希望能得到指导

import SwiftUI
import Combine

let redBorder = Color(red: 255/255, green: 0/255, blue: 0/255, opacity: 1)
let orangeBorder = Color(red: 255/255, green: 127/255, blue: 0/255, opacity: 1)
let yellowBorder = Color(red: 255/255, green: 222/255, blue: 0/255, opacity: 1)

let randomBorderColors = [redBorder, orangeBorder, yellowBorder]

struct ContentView: View {
    @State var borderColor = redBorder

    let numTimer = Timer.publish(every: 2.0, on: .main, in: .common).autoconnect()

    var body: some View {

        GeometryReader{g in
            ZStack {
                //set strokeBorder to random color from array
                Circle().strokeBorder(Color.red, lineWidth: 30)
                Text("Hello World")
                .font(.system(size: g.size.height > g.size.width ? g.size.width * 0.4: g.size.height * 0.4))
            }
        }


    }
}

您缺少onReceive的
代码,下面的代码应该可以正常工作。
您可能需要处理随机颜色逻辑,因为当前逻辑可能会多次给出相同的数字,因为您只有三种颜色

import SwiftUI
import Combine

let redBorder = Color(red: 255/255, green: 0/255, blue: 0/255, opacity: 1)
let orangeBorder = Color(red: 255/255, green: 127/255, blue: 0/255, opacity: 1)
let yellowBorder = Color(red: 255/255, green: 222/255, blue: 0/255, opacity: 1)

let randomBorderColors = [redBorder, orangeBorder, yellowBorder]

struct ContentView: View {

    @State var borderColor = redBorder

    let numTimer = Timer.publish(every: 2.0, on: .main, in: .common).autoconnect()

    var body: some View {
        GeometryReader{ g in
            ZStack {
                //set strokeBorder to random color from array
                Circle()
                    .strokeBorder(self.borderColor, lineWidth: 30)
                    .onReceive(self.numTimer, perform: { _ in
                        self.borderColor = randomBorderColors.randomElement() ?? redBorder
                        print(self.borderColor)
                    })
                Text("Hello World")
                .font(.system(size: g.size.height > g.size.width ? g.size.width * 0.4: g.size.height * 0.4))
            }
        }
    }
}

收到!谢谢你,哈沙尔!