首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObservableObject不更新视图

ObservableObject不更新视图
EN

Stack Overflow用户
提问于 2020-12-14 22:36:03
回答 2查看 95关注 0票数 1

我已经创建了一个作为ObservableObject的计时表,这样我就可以从我的应用程序中的几个点访问它。不幸的是,当@已发布的变量压力发生变化时,视图没有更新。谁能解释一下原因吗?

我已经尝试了{willSet {objectWillChange.send()} },它将触发但也不会更新视图!

高度表:

代码语言:javascript
复制
//
//  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")")
                }
            }
        }
    }
}

观点:

代码语言:javascript
复制
import SwiftUI

struct SwiftUIView: View {
    var body: some View {
        Text("\(Altimeter.shared.pressure)")
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 22:57:12

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

不要只调用文本中的对象。

票数 1
EN

Stack Overflow用户

发布于 2020-12-14 23:28:36

这解决了我的问题:

代码语言:javascript
复制
@ObservedObject private var altimeter = Altimeter.shared
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65297505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档