如何返回此功能的结果?

时间:2014-12-26 19:58:47

标签: ios objective-c swift

如何从此HealthKit查询返回步骤? 我收到错误:在调用中缺少参数#1的参数。代码:

import UIKit
import HealthKit

class ViewController: UIViewController {

    var steps = Double()
    var date = NSDate()
    var query = performHKQuery()  -->error: Missing argument for parameter #1 in call

override func viewDidLoad() {
    super.viewDidLoad()

    performHKQuery()
    printsteps()
}

func performHKQuery () -> (steps: Double, date: NSDate){
    let healthKitManager = HealthKitManager.sharedInstance
    let stepsSample = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
    let stepsUnit = HKUnit.countUnit()

    let sampleQuery = HKSampleQuery(
        sampleType: stepsSample,
        predicate: nil,
        limit: 0,
        sortDescriptors: nil)
        {
            (sampleQuery, samples, error) in

            for sample in samples as [HKQuantitySample]
            {
                self.steps  = sample.quantity.doubleValueForUnit(stepsUnit)
                self.date  = sample.startDate
            }
    }
    healthKitManager.healthStore.executeQuery(sampleQuery)
    return (steps, date)
}

func printsteps() {

     println(query.steps)           -->error: ViewController does not have a member named query
}   

任何帮助将不胜感激!如果您也可以解释为什么您的解决方案有效,那就太棒了!感谢

代码已在@jrturton

的反馈后更新

1 个答案:

答案 0 :(得分:1)

HKQuery是类的名称,您将其用作变量名称。这使编译器感到困惑。

将名称更改为query或其他内容。

你也有一些结构性问题:

class ViewController: UIViewController {

    var steps = Double()
    var date = NSDate()
    var HKQuery = performHKQuery()  -->error: Missing argument for parameter #1 in call

在这里,你要宣布一项财产并立即对其进行初始化。您不能将此作为初始化程序使用,因为拥有该方法的self在初始化时不存在。

将声明更改为:

var query : (steps: Double,date: NSDate)?

这将它设置为可选的元组类型。在viewDidLoad中,您可以这样做:

query = performHKQuery()

设置值。

然后,在printSteps中,执行以下操作:

func printsteps() {

    println(query?.steps)
}