Why does the following LoginDateMonitorView result in hundreds of messages in the debugger?
2022-10-13 06:31:03.959864+0100 Test[4412:126282] [SwiftUI] Publishing changes from within view updates is not allowed, this will cause undefined behavior.
protocol PropertyObserver: ObservableObject {
associatedtype T: NSObject
associatedtype Value
var object: T { get }
var property: KeyPath<T, Value> { get }
}
extension PropertyObserver {
var objectWillChange: AnyPublisher<Value, Never> {
object.publisher(for: property).eraseToAnyPublisher()
}
}
final class User: NSObject {
@objc dynamic var lastLogin: Date = Date(timeIntervalSince1970: 9)
}
final class UserLoginMonitor: ObservableObject {
let user: User
init(_ user: User) {
self.user = user
}
}
extension UserLoginMonitor: PropertyObserver {
var object: User {
user
}
var property: KeyPath<User, Date> {
\.lastLogin
}
}
struct LoginDateMonitorView: View {
@StateObject private var monitor: UserLoginMonitor
init(user: User) {
_monitor = StateObject(wrappedValue: UserLoginMonitor(user))
}
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.padding()
}
}