【发布时间】: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)")
}
}
【问题讨论】:
标签: ios xcode swiftui combine observableobject