ObservableObject 不更新视图
Posted
技术标签:
【中文标题】ObservableObject 不更新视图【英文标题】:ObservableObject not updating View 【发布时间】:2020-12-14 22:36:03 【问题描述】:我创建了一个 Atmeter 作为 ObservableObject,以便我可以从我的应用程序中的多个点访问它。不幸的是,当@Published 变量压力发生变化时,视图没有更新。谁能解释一下原因?
我已经尝试过 willSet objectWillChange.send() ,它会触发但也不会更新视图!
高度计:
//
// Altimeter.swift
// iAlti_v2
//
// Created by Lukas Wheldon on 14.12.20.
//
import Foundation
import CoreMotion
import Combine
class Altimeter: CMAltimeter, ObservableObject
static let shared = Altimeter()
@Published var pressure: Double = 0
func start()
if Altimeter.isRelativeAltitudeAvailable()
switch Altimeter.authorizationStatus()
case .notDetermined: // Handle state before user prompt
debugPrint("CM: Awaiting user prompt...")
//fatalError("Awaiting CM user prompt...")
case .restricted: // Handle system-wide restriction
fatalError("CM Authorization restricted!")
case .denied: // Handle user denied state
fatalError("CM Authorization denied!")
case .authorized: // Ready to go!
debugPrint("CM Authorized!")
@unknown default:
fatalError("Unknown CM Authorization Status!")
Altimeter.shared.startRelativeAltitudeUpdates(to: OperationQueue.main) data, error in
if let trueData = data
//debugPrint(#function, trueData)
Altimeter.shared.pressure = trueData.pressure.doubleValue * 10
else
debugPrint("Error starting relative Altitude Updates: \(error?.localizedDescription ?? "Unknown Error")")
观点:
import SwiftUI
struct SwiftUIView: View
var body: some View
Text("\(Altimeter.shared.pressure)")
【问题讨论】:
【参考方案1】:您需要在 SwiftUIView 中使用 @ObservedObject 包装器。
不要只调用文本中的对象。
【讨论】:
我还在视图中尝试了@ObservedObject altimeter = Altimeter(),但这也不起作用!而且我不应该创建一个单例实例,对吧?【参考方案2】:这解决了我的问题:
@ObservedObject private var altimeter = Altimeter.shared
【讨论】:
以上是关于ObservableObject 不更新视图的主要内容,如果未能解决你的问题,请参考以下文章
Swiftui:子视图没有收到对 observableobject 的更新
UITextField 未更新以更改 ObservableObject (SwiftUI)