无法转换NSSet类型的值?到期望的参数类型Set <hksampletype>

时间:2016-07-16 09:26:37

标签: ios swift

我刚开始在2天前学习swift,所以如果这听起来像是一个愚蠢的问题,我会提前道歉。

我正在按照本教程从HealthKit获取基本用户数据:https://www.natashatherobot.com/healthkit-getting-fitness-data/ 但是当我编译它时,我收到以下错误:

  

无法转换NSSet类型的值?预期的参数类型   设置&lt;'HKSampleType&gt;

func requestHealthKitAuthorization(dataTypesToWrite: NSSet?, dataTypesToRead: NSSet?) {
    healthStore?.requestAuthorizationToShareTypes(dataTypesToWrite, readTypes: dataTypesToRead, completion: { (success, error) -> Void in
        if success {
            println("success")
        } else {
            println(error.description)
        }
    })
}

我尝试过在网上找到的各种答案但没有成功。

任何提示/想法都将非常感谢!

2 个答案:

答案 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处理程序参数的可选性已发生变化。

  • printlnprint统一为新的print

但是你可能(非常可能)在古代文章之后发现许多其他困难。

我建议您找到为您使用的相同版本的Xcode / Swift编写的另一篇文章

答案 1 :(得分:2)

您可以将NSSet投射到Swift Set

if let writeDataTypes = dataTypesToWrite as? Set<HKSampleType>,
       readDataTypes = dataTypesToRead as? Set<HKSampleType> { ...