【问题标题】:Cannot convert value of type NSSet? to expected argument type Set<HKSampleType>无法转换 NSSet 类型的值?到预期的参数类型 Set<HKSampleType>
【发布时间】:2016-07-16 17:46:27
【问题描述】:

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

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

无法转换 NSSet 类型的值?到预期的参数类型 设置

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

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

任何提示/想法将不胜感激!

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您似乎找到了一篇很久很久以前用 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&lt;HKSampleType&gt;?Set&lt;HKObjectType&gt;?。 (错误信息表示第一个不匹配。)

    • completion 处理程序参数的可选性已更改。

    • printlnprint 统一为新的print

    但是你可能(很可能)在这篇古老的文章之后发现许多其他困难。

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

    【讨论】:

      【解决方案2】:

      您可以将 NSSet 转换为 Swift Set

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多