我已获得访问HealthStore的权限,并且我已成功将数据打印到控制台。但是我需要访问函数外部的数据,我已经创建了一个单例,它工作正常。唯一的问题是,来自示例查询(performQueryForHrSamples())的数据不会在函数外部持久存在,这意味着当我在函数外部调用变量beatsPerMin时,我得到nil。该变量以var beatsPerMin:Double!
启动我试图“取消”该功能以找到创建 - >的方法。返回,但没有成功。
有人可以帮我找到一种方法让这个变量在perfromQueryForHRSamples()之外可以访问吗?也许我可以将数据保存到CoreData,如下所示:(Can I save value in a completion Handler)?
import UIKit
class ViewController: UIViewController {
var beatsPerMin:Double!
override func viewDidLoad() {
super.viewDidLoad()
somefunc1()
perfromQueryForHRSamples()
somefunc3()
}
func somefunc1() {
....... {
(success, error) in
if success {
println("success")
} else {
println("cancelled \(error)")
}
}
}
**func perfromQueryForHRSamples**() {
let heartRateSample = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)
let sampleQuery = HKSampleQuery(
sampleType: heartRateSample,
predicate: nil,
limit: 0,
sortDescriptors: nil) {
(sampleQuery, samples, error) in
for sample in samples as [HKQuantitySample]
{
**self.beatsPerMin** = sample.quantity.doubleValueForUnit(self.heartRateUnit)
println("Query output: \(self.beatsPerMin)")
}
}
self.healthStore.executeQuery(sampleQuery)
}
func somefunc3() {
println("\(beatsPerMin)")
}
}
答案 0 :(得分:1)
...我发现我的功能有时候不会被评估,除非他们被称为" ...
仅供参考,在从另一个函数调用函数之前,不会评估任何函数。
如果somefunc2
生成Double
作为输出,那么它应输出Double
。
func somefunc2() -> Double {
var result: Double = 0.0
// figure out what the result should be and assign it to result
return result
}
如果somefunc3
需要Double
作为输入,则它应接受Double
作为参数。
func somefunc3(z: Double) {
// do stuff with z
println("\(z)")
}
然后您可以通过以下值连接这两个函数:
let z = somefunc2()
somefunc3(z)
或者如果你想成为"聪明的"。
somefunc3(somefunc2())
在您的编程教育的这一点上,我建议您更多地在操场上乱搞,直到您感觉到功能如何相互作用。
祝你好运!