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

时间:2015-10-30 03:28:15

标签: ios swift health-kit

我已将所有必要的健康数据导入到我的应用中,但是当我尝试在我导入它们的类之外使用健康变量时,我不断获得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示例的方法是异步完成的,但我对这里发生的事情感到有点困惑。我想我错过了与完成处理程序有关的事情,但我不确定从哪里开始。

(如果你想要更完整的代码,我可以加入它,但我想我会通过简化来节省一些空间。)

2 个答案:

答案 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()