【发布时间】:2022-01-23 07:47:27
【问题描述】:
我目前正在构建一个用户可以创建多个计时器的项目,但是我遇到了以下错误。 “实例方法 'onReceive(_:perform:)' 要求 'CountdownTimer' 符合 'Publisher'”。我只是不知道如何让 Countdown Timer 符合 Publisher。
这是我的计时器对象的代码:
struct CountdownTimer: Identifiable {
let id = UUID()
let name: String
var minutes: Int
var seconds: Int
var countdown: Int {
let totalTime = seconds + (minutes * 60)
return totalTime
}
}
func timeString(time: Int) -> String {
return String(format: "%01i:%02i", minutes, seconds)
}
class CountdownTimers: ObservableObject {
@Published var timers = [CountdownTimer]()
}
我的内容视图:
struct ContentView: View {
@Environment(\.presentationMode) var presentationMode
@ObservedObject var countdownTimers = CountdownTimers()
@State private var showingAddSheet = false
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
NavigationView {
GeometryReader { geometry in
ZStack {
Color.pastelGreen
.edgesIgnoringSafeArea(.all)
VStack {
ScrollView {
ForEach(countdownTimers.timers) { timer in
ZStack {
CardView()
.overlay(
HStack {
VStack(alignment: .leading) {
Text("\(timer.countdown)")
.font(.custom("Quicksand-Bold", size: 30))
Text(" \(timer.timeString(time: timer.countdown))")
.font(.custom("Quicksand-Bold", size: 40))
.onReceive(timer){ _ in
if timers.countdown > 0 {
timers.countdown -= 1
}
}
错误发生在 .OnReceive(timer) 行。分钟和秒是在不同的“AddView”上创建的,但我认为该问题与该部分无关。
任何帮助将不胜感激。
【问题讨论】:
标签: swiftui