使用Swift 4.0,我试图在内置的HealhKit类HKWorkout和我自己的自定义类之间进行向下转换。我的课是从香港训练中学来的。HKWorkout继承自HKSample从香港样板作品到香港健身。那么,为什么我不能把这个放到我自己的课上呢?如果可能的话,我希望在不显式循环采样数组的情况下执行转换。我自定义类的原因是存储addl属性和方法。
//This works. Note I am not explicitly looping over samples array.
//samples is an array of HKSample objects.
let workouts:[HKWorkout] = samples as! [HKWorkout]
//Does not work. FRWorkout is my class, inherits from HKWorkout.
let workouts:[FRWorkout] = samples as! [FRWorkout]
最终目标是获取一组FRWorkout对象,而不是HHWorkout对象。
以下是完整的上下文:
class FRWorkout: HKWorkout {
var customProperty:UInt = 0
}
let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate,
ascending: false)
let query = HKSampleQuery(sampleType: HKObjectType.workoutType(),
predicate: nil,
limit: 50,
sortDescriptors: [sortDescriptor]) { (query, samples, error) in
//Here I want FRWorkout objects instead of HKWorkout. I need to add addl info to the HKWorkout. How can this be achieved?
guard let workouts = samples as? [HKWorkout], error == nil else {
completion(nil, error)
return
}
}
最佳答案
HKSampleQuery
将返回HKWorkout
的实例,因为您将HKObjectType.workoutType()
指定为sampleType
。
您不能让HKSampleQuery
返回FRWorkout
的实例,因为HealthKit框架对您的子类一无所知。
即使您已经将您的类FRWorkout
声明为HKWorkout
的子类,但您没有从FRWorkout
接收HKSampleQuery
的实例,因此您不能向下转换返回的对象。
正如@KaneChehire所指出的,在任何情况下,对HRWorkout进行子类化都不是正确的方法。
关于ios - 将HKWorkout转换为我的自定义类(class),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48196320/