Вы пропустили код для onReceive
, следующие должны работать отлично. Возможно, вам придется поработать со случайной цветовой логикой c, поскольку текущая может давать одно и то же число несколько раз, поскольку у вас есть только три цвета.
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))
}
}
}
}