ios - 将 HKWorkout 向下转换为我的自定义类

标签 ios swift casting healthkit

使用 Swift 4.0,我试图在内置的 HealhKit 类 HKWorkout 和我自己的自定义类之间进行向下转换。我的类(class)继承自 HKWorkout。 HKWorkout 继承自 HKSample。从 HKSample 作品向下转换到 HKWorkout。那么为什么我不能进一步将它转换到我自己的类(class)呢?如果可能的话,我想在不显式循环样本数组的情况下执行转换。我的自定义类的原因是存储 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
                                    }

}

最佳答案

根据文档,不建议子类化,因此在进一步研究之前探索替代方案可能是个好主意。 From the docs :

Like many HealthKit classes, the HKWorkout class should not be subclassed. You may extend workouts by adding metadata with custom keys as appropriate for your app. For more information, see the methods init(activityType:start:end:duration:totalEnergyBurned:totalDistance:metadata:) and init(activityType:start:end:workoutEvents:totalEnergyBurned:totalDistance:metadata:).

关于ios - 将 HKWorkout 向下转换为我的自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196320/

相关文章:

swift - 覆盖通用函数会产生错误

java - 通用数组在直接引用时抛出 ClassCastException(在通过辅助方法调用时不会抛出)

ios - UITableView reloadData 在 iOS 中不起作用

ios - iTunes connect - 我在哪里可以看到 TestFlight 构建的崩溃报告?

ios - 在 Release模式下未调用 Swift 应用程序功能

c++ - malloc 的类型转换返回什么?

java - Chromecast - 如何拉伸(stretch)视频

ios - 如何在 GetStream iOS Activity Feed 组件中添加头像图像?

ios - 收到 fcm 推送通知时设置应用角标(Badge)

arrays - 类型 'String?' 不符合协议(protocol) 'Equatable'