繁体   English   中英

ObservableObject 不更新视图

[英]ObservableObject not updating View

我创建了一个 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)")
    }
}

您需要在 SwiftUIView 中使用 @ObservedObject 包装器。

不要只在文本中调用 Object。

这解决了我的问题:

@ObservedObject private var altimeter = Altimeter.shared

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM