2014-12-05 57 views
-1

我有權訪問HealthStore,併成功將數據打印到控制檯。不過,我需要訪問函數之外的數據,我創建了一個單例,它工作正常。唯一的麻煩是,示例查詢(performQueryForHrSamples())中的數據不會持久存在於函數之外,這意味着當我在函數外調用變量beatsPerMin時,我會得到nil。該變量作爲var beatsPerMin啓動:Double!如何從HealthKit查詢可訪問的外部函數中創建變量?

我曾經試圖「UNNEST」功能找到一種方法來創建一個 - >回,但都沒有成功。

是否有人可以幫助我找到一種方法,使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)") 

    } 

} 

回答

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

在你的編程教育這一點上,我建議您們在運動場上亂,直到你得到的功能如何彼此交互的感覺。

祝你好運!

+0

謝謝你,你的回答澄清了我學到的東西!非常簡潔和有用的迴應 – KML 2014-12-05 18:06:11

相關問題