通过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只是实现细节