on xcode 15.0.1, я пытаюсь использовать SwiftData для создания stopwatchitem в моем приложении для секунды, которое имеет таймер свойство. Я получаю ошибки: < /p>
Метод экземпляра 'setValue (forkey: to
< /li>
Метод экземпляра 'getValue (forKey
< /li>
< /ol>
Я знаю, что это означает что -то вроде «Не могу сохранить таймер < /code> to swiftdata», но я не уверен, как я могу решить эту проблему, я m Сторонние. Наборы для ссылки на более позднее время. CHATGPT 4O Предлагаемое решение: Определите отдельный SpectwatchController , который имеет функции start () , stop () , reset () и содержит свойство таймера.
Почему это не идеально: я обнаружил, что не могу глобально контролировать секундовые часы таким образом < /p>
2. Определение функций управления Spectwatch в SpectwatchItemView , которое отображается в ContentView в форме
forEach(stopwatches) { stopwatch in
StopwatchItemView(stopwatch: stopwatch)
}
Почему это не идеально: невозможно управлять секульдотами в глобальном управлении, труднее сохранить статус таймера/прогресс, когда приложение откидывается
code
Примечание: включение ContentView не имеет значения, так как он все еще имеет код coverplate. -Вифт-pretprint-override ">import Foundation
import SwiftData
import Combine
@Model
class StopwatchSet: Identifiable, ObservableObject {
var id = UUID()
var label: String
var stopwatches: [StopwatchItem]
init(id: UUID = UUID(), label: String, stopwatches: [StopwatchItem]) {
self.id = id
self.label = label
self.stopwatches = stopwatches
}
}
@Model
class StopwatchItem: Identifiable, ObservableObject {
var id = UUID()
var isRunning: Bool = false
var label: String
var timeElapsed: Double = 0.0
var laps: [Lap] = []
private var timer: Timer?
init(id: UUID = UUID(), label: String, timeElapsed: Double) {
self.id = id
self.label = label
self.timeElapsed = timeElapsed
}
func start() {
isRunning = true
timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { [weak self] _ in
self?.timeElapsed += 0.01
}
}
func stop() {
isRunning = false
timer?.invalidate()
timer = nil
}
func reset() {
stop()
timeElapsed = 0.0
}
}
@Model
class Lap: Identifiable, ObservableObject {
var id = UUID()
var label: String
var timeElapsed: String
init(label: String, timeElapsed: String) {
self.label = label
self.timeElapsed = timeElapsed
}
}
< /code>
stopwatchitemview.swift
import SwiftUI
import SwiftData
struct StopwatchItemView: View {
@State var stopwatch: StopwatchItem
var body: some View {
VStack {
Text(formatTime(stopwatch: stopwatch, input: stopwatch.timeElapsed))
}
}
}
#Preview {
StopwatchItemView(stopwatch: StopwatchItem(label: "Stopwatch", timeElapsed: 0.0))
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... of-a-class
Мобильная версия