我刚开始在2天前学习swift,所以如果这听起来像是一个愚蠢的问题,我会提前道歉。
我正在按照本教程从HealthKit获取基本用户数据:https://www.natashatherobot.com/healthkit-getting-fitness-data/ 但是当我编译它时,我收到以下错误:
无法转换NSSet类型的值?预期的参数类型 设置<'HKSampleType>
func requestHealthKitAuthorization(dataTypesToWrite: NSSet?, dataTypesToRead: NSSet?) {
healthStore?.requestAuthorizationToShareTypes(dataTypesToWrite, readTypes: dataTypesToRead, completion: { (success, error) -> Void in
if success {
println("success")
} else {
println(error.description)
}
})
}
我尝试过在网上找到的各种答案但没有成功。
任何提示/想法都将非常感谢!
答案 0 :(得分:3)
很久很久以前,你似乎找到了一篇写在Swift 1时代的旧文章。 我假设您使用的是最新发布的Xcode版本(7.3.1,包括Swift 2.2.1)。
显示错误的方法可以这样重写:
func requestHealthKitAuthorization(dataTypesToWrite: Set<HKSampleType>?, dataTypesToRead: Set<HKObjectType>?) {
healthStore?.requestAuthorizationToShareTypes(dataTypesToWrite, readTypes: dataTypesToRead, completion: { (success, error) -> Void in
if success {
print("success")
} else {
print(error?.description ?? "unknown error")
}
})
}
前两个参数的两种类型已更改为Set<HKSampleType>?
和Set<HKObjectType>?
。
(错误消息表示第一个不匹配。)
completion
处理程序参数的可选性已发生变化。
println
和print
统一为新的print
。
但是你可能(非常可能)在古代文章之后发现许多其他困难。
我建议您找到为您使用的相同版本的Xcode / Swift编写的另一篇文章。
答案 1 :(得分:2)
您可以将NSSet
投射到Swift Set
if let writeDataTypes = dataTypesToWrite as? Set<HKSampleType>,
readDataTypes = dataTypesToRead as? Set<HKSampleType> { ...