Xcode 为Apple Watch构建一个带有SwiftUi的基本高度表
我正在尝试用SwiftUI构建一个MVP,它可以简单地在我的苹果手表上显示海拔高度的变化。从那里我将知道下一步要去哪里(我想用它做滑翔伞和其他航空项目) 我以前在python方面有经验,但在Swift方面没有经验,所以即使在大量教程之后,我也非常不确定如何以及在何处声明和使用功能 以下是我目前的代码: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
//
// 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()
}
}
接下来的步骤是检查我是否可以访问气压计原始数据并计算其高度。如果您提到您遇到了多个错误,您应该在问题中包含这些错误。您是对的,我编辑了我的问题!