Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以直接从另一个类查询实时HKUnit数据而不传递数据?_Swift_Watchkit - Fatal编程技术网

Swift 是否可以直接从另一个类查询实时HKUnit数据而不传递数据?

Swift 是否可以直接从另一个类查询实时HKUnit数据而不传递数据?,swift,watchkit,Swift,Watchkit,我有一个自定义的WorkoutSessionManager.swift,它没有子类WKInterfaceController。它有自己的上下文和协议。它包含查询和示例更新。所有心率、距离和能量数据(HKUnits)都打印到控制台。这个简单的块将数据输出到控制台 guard let sample = activeEnergyBurnedSamples.first else{return} let value = sample.quantity.doubleValueForUnit(

我有一个自定义的
WorkoutSessionManager.swift
,它没有子类
WKInterfaceController
。它有自己的上下文和协议。它包含查询和示例更新。所有心率、距离和能量数据(HKUnits)都打印到控制台。这个简单的块将数据输出到控制台

guard let sample = activeEnergyBurnedSamples.first else{return}
        let value = sample.quantity.doubleValueForUnit(self.energyUnit)
        print(value)
我有一个单独的
仪表板.swift
,带有mi、Cal和bpm标签

由于是实时数据,是否可以直接查询香港数据而不传递此
属性

如果这不可能,我应该如何完成将
发送到外部类中的标签

WorkoutSessionManager.swift

func createActiveEnergyStreamingQuery(workoutStartDate: NSDate) -> HKQuery? {

    guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned) else {return nil}
    let activeEnergyQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, samples, deletedObjects, newAnchor, error) -> Void in
        guard let newAnchor = newAnchor else {return}
        self.anchor = newAnchor
        self.addActiveEnergySamples(samples)
    }
    activeEnergyQuery.updateHandler = {(query, samples, deletedObjects, newAnchor, error) -> Void in
            self.anchor = newAnchor!
            self.addActiveEnergySamples(samples)
    }
    return activeEnergyQuery
}

func addActiveEnergySamples(samples: [HKSample]?) {
    print("updating calorie samples")
    guard let activeEnergyBurnedSamples = samples as? [HKQuantitySample] else { return }

    dispatch_async(dispatch_get_main_queue()) { 

        self.currentActiveEnergyQuantity = self.currentActiveEnergyQuantity.addQuantitiesFromSamples(activeEnergyBurnedSamples, unit: self.energyUnit)
        self.activeEnergySamples += activeEnergyBurnedSamples
        self.delegate?.workoutSessionManager(self, didUpdateActiveEnergyQuantity: self.currentActiveEnergyQuantity)

        // Checks
        guard let sample = activeEnergyBurnedSamples.first else{return}
        let value = sample.quantity.doubleValueForUnit(self.energyUnit)
        print(value)
    }
}
DashboardController.swift

@IBOutlet weak var milesLabel: WKInterfaceLabel!
@IBOutlet weak var caloriesLabel: WKInterfaceLabel!
@IBOutlet weak var bmpLabel: WKInterfaceLabel!

如果我理解正确,您希望在HealthKit商店中查询特定种类的样本,并在每次将新样本保存到商店时更新您的UI

您可以通过多种方式实现这一点,包括使用或。有关使用委托的示例代码,请参见下文

您已经在WorkoutSessionManager类中定义了WorkoutSessionManager协议(如图所示)。如果该协议与中使用的协议相同,它将提供诸如
didUpdateActiveeEnergyQuantity
didUpdatedInstanceQuantity
、和
didUpdateHeartasample
等方法。如果给WorkoutSessionManager一个充当委托的对象,则管理器可以使用委托协议提供的方法将UI管理委托给该对象

在主体类WorkoutSessionManager中,定义一个属性来保存对委托的弱引用:
弱变量委托:WorkoutSessionManagerDelegate?

然后,只要有新样本可用,就调用相应的委托方法。因此,例如,在
addActiveEnergySamples
函数中,您已经有了以下行:
self.delegate?.workoutSessionManager(self,didUpdateActiveEnergyQuantity:self.currentActiveEnergyQuantity)

在委派类DashboardController中,采用WorkoutSessionManagerDelegate协议:
class DashboardController:WKInterfaceController,WorkoutSessionManagerDelegate

awakeWithContext
中,将自己指定为经理的代表:
wSM?.delegate=self


最后,在delegate类中,实现委派协议提供的方法,并根据通过这些方法传递的数据对UI进行必要的更改。

如果我理解正确,您希望查询HealthKit store中的某些样本,并在每次将新样本保存到商店时更新UI

您可以通过多种方式实现这一点,包括使用或。有关使用委托的示例代码,请参见下文

您已经在WorkoutSessionManager类中定义了WorkoutSessionManager协议(如图所示)。如果该协议与中使用的协议相同,它将提供诸如
didUpdateActiveeEnergyQuantity
didUpdatedInstanceQuantity
、和
didUpdateHeartasample
等方法。如果给WorkoutSessionManager一个充当委托的对象,则管理器可以使用委托协议提供的方法将UI管理委托给该对象

在主体类WorkoutSessionManager中,定义一个属性来保存对委托的弱引用:
弱变量委托:WorkoutSessionManagerDelegate?

然后,只要有新样本可用,就调用相应的委托方法。因此,例如,在
addActiveEnergySamples
函数中,您已经有了以下行:
self.delegate?.workoutSessionManager(self,didUpdateActiveEnergyQuantity:self.currentActiveEnergyQuantity)

在委派类DashboardController中,采用WorkoutSessionManagerDelegate协议:
class DashboardController:WKInterfaceController,WorkoutSessionManagerDelegate

awakeWithContext
中,将自己指定为经理的代表:
wSM?.delegate=self

最后,在delegate类中,实现委派协议提供的方法,并根据通过这些方法传递的数据对UI进行必要的更改