我怎么理解这一点?我添加了几行不影响结构并收到此错误。 我所做的最后更改是第二个选项卡中的 .alert。否则,同样的代码昨天可以工作,今天就不再工作了......
import SwiftUI
struct HomeView: View {
@ObservedObject var alarmViewModel: AlarmViewModel
@ObservedObject var wakeUpIntervalData: WakeUpModel
@ObservedObject var soundSettingsViewData: SoundSettingsViewModel
@State private var selectedTab = 2
@State private var isEditingNewAlarm = false
@State private var editingAlarmIndex: Int? = nil
var body: some View {
TabView(selection: $selectedTab) {
// MARK: - Statistic Tab
NavigationView {
Color("BackgroundColorSet").ignoresSafeArea()
}
.tabItem {
Image(systemName: "waveform")
Text("Statistic")
}.tag(1)
// MARK: - Alarm Tab
NavigationView {
VStack {
ScrollView {
ForEach(alarmViewModel.alarms.indices, id: \.self) { index in
NavigationLink(
destination: AlarmSettingsView(
alarmViewModel: alarmViewModel,
wakeUpIntervalData: wakeUpIntervalData,
soundSettingsViewData: soundSettingsViewData,
delayData: DelayViewModel(),
alarmIndex: index
)
.onAppear {
alarmViewModel.loadAlarm(at: index)
}
) {
AlarmWidgetView(alarm: alarmViewModel.alarms[index])
}
}
// Кнопка добавления нового будильника
NavigationLink(
destination: AlarmSettingsView(
alarmViewModel: alarmViewModel,
wakeUpIntervalData: wakeUpIntervalData,
soundSettingsViewData: soundSettingsViewData,
delayData: DelayViewModel()
),
isActive: $isEditingNewAlarm
) {
Button(action: {
alarmViewModel.resetCurrentAlarm()
isEditingNewAlarm = true
}) {
Text("+")
.fontWeight(.thin)
.font(.system(size: 54))
.frame(width: 100, height: 46)
.foregroundColor(Color("BackgroundColorSet"))
.background(Color("StringColorSet"))
.cornerRadius(10)
.padding()
}
}
}.background(Color("BackgroundColorSet"))
}
.alert(isPresented: $alarmViewModel.showAlert) { // Добавьте отображение AlarmAlertView здесь
Alert(
title: Text("Wake Up!"),
message: Text("It's time to wake up!"),
primaryButton: .default(Text("Snooze +10 min"), action: {
// Ваш код для отсрочки
Task {
await alarmViewModel.stopLiveActivity() // Остановить текущую Live Activity
await alarmViewModel.startLiveActivity() // Запустить новую Live Activity с отсрочкой
}
}),
secondaryButton: .destructive(Text("Stop"), action: {
// Ваш код для остановки будильника
alarmViewModel.stopLiveActivity() // Остановить текущую Live Activity
})
)
}
}
.tabItem {
Image(systemName: "alarm")
Text("Alarm")
}.tag(2)
// MARK: - Settings Tab
NavigationView {
Color("BackgroundColorSet").ignoresSafeArea()
}
.tabItem {
Image(systemName: "gearshape.fill")
Text("Settings")
}.tag(3)
}
}
}
#Preview {
HomeView(
alarmViewModel: AlarmViewModel(),
wakeUpIntervalData: WakeUpModel(),
soundSettingsViewData: SoundSettingsViewModel()
)
}
我更改 .alert 会产生影响吗?
视图模型可能存在问题
AlarmViewModel
。当我使用以下框架实现时,我能够编译它:
class AlarmViewModel: ObservableObject {
let alarms = ["One", "Two"]
@Published var showAlert = false
func loadAlarm(at: Int) {}
func resetCurrentAlarm() {}
func stopLiveActivity() {}
func startLiveActivity() {}
}
但是,仍然有两个编译器警告:
NavigationLink
的使用方式已被弃用alarmViewModel.stopLiveActivity()
和 alarmViewModel.startLiveActivity()
时出现无异步操作的警告。因此您执行启动/停止的方式也可能存在问题。