Swiftdata не может сохранить свойство таймера класса?IOS

Программируем под IOS
Ответить
Anonymous
 Swiftdata не может сохранить свойство таймера класса?

Сообщение Anonymous »

Введите описание изображения здесь
on xcode 15.0.1, я пытаюсь использовать SwiftData для создания stopwatchitem в моем приложении для секунды, которое имеет таймер свойство. Я получаю ошибки: < /p>

Метод экземпляра 'setValue (forkey: to :)' требует, чтобы «таймер» соответствует «PersistentModel» < /p >
< /li>
Метод экземпляра 'getValue (forKey :)' требует, чтобы «таймер» соответствовал «PersistentModel» < /p>
< /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»