我已经创建了一个作为ObservableObject的计时表,这样我就可以从我的应用程序中的几个点访问它。不幸的是,当@已发布的变量压力发生变化时,视图没有更新。谁能解释一下原因吗?
我已经尝试了{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)")
}
}发布于 2020-12-14 22:57:12
您需要在SwiftUIView中使用@ObservedObject包装器。
不要只调用文本中的对象。
发布于 2020-12-14 23:28:36
这解决了我的问题:
@ObservedObject private var altimeter = Altimeter.sharedhttps://stackoverflow.com/questions/65297505
复制相似问题