通过HealthKit中的HKWorkoutActivityType获取活动名称
使用HKObjectType.workoutType()
获取锻炼后,我们得到HKWorkoutActivityType
,这是一个enum HKWorkoutActivityType : UInt
。 从Swift 4.2开始,由于该枚举的类型为UInt
,因此无法将枚举大小写作为String
来获取。
尽管会涉及一些手册,但我们可以构建一个生成器来获取所有枚举用例名称。 在这里,我们将编写代码来生成代码,并使用生成的代码来检查所有值。
在我们的iOS应用中执行此Swift代码
func makeCode(string:String){
let pattern =“ case \\ w *”
让范围= NSMakeRange(0,string.count-1)
让正则表达式=尝试! NSRegularExpression(模式:模式,选项:[])
正则表达式
.matches(输入:字符串,选项:[],范围:范围)
.forEach({结果
让开始= string.index(string.startIndex,offsetBy:result.range.lowerBound)
让结束= string.index(string.startIndex,offsetBy:result.range.upperBound)
让substring = String(string [开始…结束])
让名称=子字符串
.replacingOccurrences(of:“ case”,带有:“”)
.replacingOccurrences(of:““,with:“”)
.replacingOccurrences(of:“ \ n”,其中:“”)
print(“ dictionary [HKWorkoutActivityType。\(name).rawValue] = \” \(name)\””))
})
}
例如,其中string
是来自HKWorkoutActivityType的所有情况
case archery
射箭的常数。
case bowling
保龄球的常数
case fencing
击剑常数。
case gymnastics
表演体操。
case trackAndField
参加田径比赛,包括铅球,标枪,撑竿跳高和相关运动。
代码要做的是使用正则表达式检查case
之后的所有名称,并构建我们的代码
字典[HKWorkoutActivityType.americanFootball.rawValue] =“ americanFootball”
dictionary [HKWorkoutActivityType.archery.rawValue] =“射箭”
字典[HKWorkoutActivityType.australianFootball.rawValue] =“ australianFootball”
字典[HKWorkoutActivityType.badminton.rawValue] =“羽毛球”
词典[HKWorkoutActivityType.baseball.rawValue] =“棒球”
上面生成的带有dictionary
代码包含rawValue
作为键和枚举用例名称作为value
。
稍后,当我们得到任何HKWorkoutActivityType
,我们可以与该dictionary
进行比较以找到实际名称。 这比带数字的硬编码活动名称更好,因为那些rawValue
只是实现细节