Xcode 为Apple Watch构建一个带有SwiftUi的基本高度表

Xcode 为Apple Watch构建一个带有SwiftUi的基本高度表,xcode,swiftui,watchos,core-motion,Xcode,Swiftui,Watchos,Core Motion,我正在尝试用SwiftUI构建一个MVP,它可以简单地在我的苹果手表上显示海拔高度的变化。从那里我将知道下一步要去哪里(我想用它做滑翔伞和其他航空项目) 我以前在python方面有经验,但在Swift方面没有经验,所以即使在大量教程之后,我也非常不确定如何以及在何处声明和使用功能 以下是我目前的代码: // // ContentView.swift // Altimeter WatchKit Extension // // Created by Luke Crouch on 29.09.2

我正在尝试用SwiftUI构建一个MVP,它可以简单地在我的苹果手表上显示海拔高度的变化。从那里我将知道下一步要去哪里(我想用它做滑翔伞和其他航空项目)

我以前在python方面有经验,但在Swift方面没有经验,所以即使在大量教程之后,我也非常不确定如何以及在何处声明和使用功能

以下是我目前的代码:

//
//  ContentView.swift
//  Altimeter WatchKit Extension
//
//  Created by Luke Crouch on 29.09.20.
//

import SwiftUI
import CoreMotion


//class func isRelativeAltitudeAvailable() -> Bool


struct ContentView: View {
    let motionManager = CMMotionManager()
    let queue = OperationQueue()
    let altimeter = CMAltimeter()
    let altitude = 0
    var relativeAltitude: NSNumber = 0
    
    var body: some View {
        
        if motionManager.isRelativeAltitudeAvailable() {
         switch CMAltimeter.authorizationStatus() {
         case .notDetermined: // Handle state before user prompt
             fatalError("Awaiting user prompt...")
         case .restricted: // Handle system-wide restriction
            fatalError("Authorization restricted!")
         case .denied: // Handle user denied state
            fatalError("Auhtorization denied!")
         case .authorized: // Ready to go!
             print("Authorized!")
         @unknown default:
            fatalError("Unknown Authorization Status")
         }
            altimeter.startRelativeAltitudeUpdates(to: queue, withHandler: CMAltitudeHandler)
        }

// something like relative Altitude = queue[..]
        
        Text("\(relativeAltitude)")
            .font(.largeTitle)
            .fontWeight(.bold)
            .foregroundColor(Color.green)
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
我遇到了多个我不知道如何处理的错误:

  • 类型“Void”不能符合“View”,只有结构/枚举/类类型才能符合协议
  • CMMotionManager类型的值没有成员“isRelativeAltitudeAvailable”
  • 类型“()”无法与视图一致
  • 无法将类型“CMAltitudeHandler.type”(aka'((可选,可选)->()).type)的值转换为预期的参数类型“CMAltitudeHandler”(aka)(可选,可选)->())
你能给我一些提示吗

非常感谢你!
卢克

我试了很多次才发现:

//
//  ContentView.swift
//  Altimeter WatchKit Extension
//
//  Created by Lukas Wheldon on 29.09.20.
//

import SwiftUI
import CoreMotion

struct ContentView: View {
    @State var relativeAltitude: NSNumber = 0
    @State var altitude = 0
    let altimeter = CMAltimeter()
    
    func update(d: CMAltitudeData?, e: Error?){
        print("altitude \(altitude)")
        print("CMAltimeter \(altimeter)")
        print("relative Altitude \(relativeAltitude))")
        
    }
    
    
    var body: some View {
        VStack {
            Text("\(altimeter)")
                .fontWeight(.bold)
                .foregroundColor(Color.green)
            Button(action: {
                print("START")
                self.startAltimeter()
            }, label: {
                Text("Start Altimeter")
                    .bold()
                    .foregroundColor(.green)
            })
        }
    }
    
    func startAltimeter() {
        if CMAltimeter.isRelativeAltitudeAvailable() {
            switch CMAltimeter.authorizationStatus() {
             case .notDetermined: // Handle state before user prompt
             print("bb")
             //fatalError("Awaiting user prompt...")
             case .restricted: // Handle system-wide restriction
             fatalError("Authorization restricted!")
             case .denied: // Handle user denied state
             fatalError("Authorization denied!")
             case .authorized: // Ready to go!
             let _ = print("Authorized!")
             @unknown default:
             fatalError("Unknown Authorization Status")
             }
            self.altimeter.startRelativeAltitudeUpdates(to: OperationQueue.main) {(data,error) in DispatchQueue.main.async {
                print("\(altitude)")
                print("\(relativeAltitude)")
            }
            
            }
        }
    }
    
}



struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
    
}

接下来的步骤是检查我是否可以访问气压计原始数据并计算其高度。

如果您提到您遇到了多个错误,您应该在问题中包含这些错误。您是对的,我编辑了我的问题!