如何在其他 类 中使用导入的 HealthKit 示例

How to use imported HealthKit samples in other classes

我已将所有必要的健康数据导入到我的应用程序中,但是当我尝试在我导入它们的 class 之外使用健康变量时,我不断得到 nil 值。

我有一个 class 有一个成功导入数据的方法和一个成功打印数据的方法:

class HealthData:NSObject {

    var healthData:Double?

    func importData() {
        readMostRecentSample(sampleType!, completion: { (mostRecentSample, error) -> Void in
            self.printData()
        })
    }
    func printData() {
        print(healthData)
    }
}

但是当我尝试在新的 class 中做这样的事情时:

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 样本的方法是异步完成的,但我对这里发生的事情有点困惑。我想我缺少一些与完成处理程序有关的东西,但我不确定从哪里开始。

(如果你想要更完整的代码,我可以包含它,但我想我会通过简化事情来节省一些 space。)

这不是 healthKit 的问题。

在你所有 classes

 var healthData:Double?

是一个自动初始化为nil的实例变量。这意味着

var healthData2 = HealthData().healthData

部分

HealthData()

创建一个新实例。所以

HealthData().healthData

始终为零,因为您在此实例中未导入任何内容。

您可能导入了那个 class 的另一个实例。

更多相关信息:Apples Swift 电子书是免费的。

你是 HealthData class 应该是单例对象。推荐的 Swift 单例模式是

class HealthData:NSObject {
    static let sharedInstance = HealthData()
...
}

然后访问来自其他 class 的数据,例如

HealthData.sharedInstance().myfunc()