我已将所有必要的健康数据导入到我的应用中,但是当我尝试在我导入它们的类之外使用健康变量时,我不断获得nil
值。
我有一个类,它有一个成功导入数据的方法和一个成功打印数据的方法:
class HealthData:NSObject {
var healthData:Double?
func importData() {
readMostRecentSample(sampleType!, completion: { (mostRecentSample, error) -> Void in
self.printData()
})
}
func printData() {
print(healthData)
}
}
但是当我尝试在新课堂上做这样的事情时:
class HealthAlgorithm:NSObject {
var healthData2 = HealthData().healthData
func printData() {
print(healthData2)
}
}
我从成功调用原始printData
方法的同一个地方调用该函数:
class HealthData:NSObject {
var healthData:Double?
func importData() {
self.printsData()
HealthAlgorithm().printsData()
}
func printsData() {
print(healthData)
}
}
我遇到了与此类似的问题,我意识到查询HealthKit示例的方法是异步完成的,但我对这里发生的事情感到有点困惑。我想我错过了与完成处理程序有关的事情,但我不确定从哪里开始。
(如果你想要更完整的代码,我可以加入它,但我想我会通过简化来节省一些空间。)
答案 0 :(得分:0)
这不是一个healthKit问题。
在所有课程中
var healthData:Double?
是一个使用nil自动初始化的实例变量。这意味着
var healthData2 = HealthData().healthData
部分
HealthData()
创建一个新实例。所以
HealthData().healthData
始终为nil,因为您在此实例中未导入任何内容。
您可能已导入该类的另一个实例。
更多相关信息:Apples Swift电子书是免费的。
答案 1 :(得分:0)
你的HealthData类应该是一个单例对象。推荐的Swift单例模式是
class HealthData:NSObject {
static let sharedInstance = HealthData()
...
}
然后从其他类访问数据,如
HealthData.sharedInstance().myfunc()