在没有更多上下文的情况下使表达式类型模棱两可

Posted

技术标签:

【中文标题】在没有更多上下文的情况下使表达式类型模棱两可【英文标题】:Getting Expression Type ambiguous without more context 【发布时间】:2016-04-21 06:55:54 【问题描述】:

我正在尝试请求授权以使用 Health 应用数据。

我收到以下错误:

FirstViewController.swift:44:9: Expression type '(typesToShare: _, readTypes: Set<HKSampleType>?, completion: (_, _) -> Void)' (aka '(typesToShare: _, readTypes: Optional<Set<HKSampleType>>, completion: (_, _) -> ())') is ambiguous without more context

在 44:9 哪里 typesToShare: nil

let healthStore: HKHealthStore? = 
        if HKHealthStore.isHealthDataAvailable() 
            return HKHealthStore()
         else 
            return nil
        
    ()

    let dateOfBirthCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
        HKCharacteristicTypeIdentifierDateOfBirth)

    let biologicalSexCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
        HKCharacteristicTypeIdentifierBiologicalSex)

    let bloodTypeCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
        HKCharacteristicTypeIdentifierBloodType)

    let dataTypesToRead: Set<HKSampleType>? = NSSet(objects:
        dateOfBirthCharacteristic!, biologicalSexCharacteristic!, bloodTypeCharacteristic!) as? Set<HKSampleType>

    let dataTypesToShare: Set<HKSampleType>? = NSSet() as? Set<HKSampleType>

    // Making the request
    let healthData = healthStore?.requestAuthorizationToShareTypes
    (typesToShare: nil,
     readTypes: dataTypesToRead,
     completion:  (success, error) -> Void in
                                            if success 
                                                println("success")
                                             else 
                                                println(error.description)
                                            
    )

我是 ios 新手,之前没有使用过 HealthKit。我该如何解决?

【问题讨论】:

【参考方案1】:

我也是 healthKit 的新手,但尝试在 typesToShare 参数中的 nil 位置使用 dataTypesToShare 变量。更好地创建 dataTypesToShare,就像你对 dataTypesToRead 所做的那样。而且这个函数不返回任何东西。你可以尝试使用闭包来获得完成块成功 .

      func authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!)
   
healthStore?.requestAuthorizationToShareTypes
    (typesToShare: nil,
     readTypes: dataTypesToRead,
     completion:  (success, error) -> Void in
                                            if success 
                                                println("success")
                                             else 
                                            println(error.description)
                                        
)

【讨论】:

你可以调用这个函数,比如 authorizeHealthKit (success:type,error : type ) in print("success") 感谢苏拉夫的回复!我尝试使用 nil 并以与 typesToRead 相同的方式创建 typesToShare,但我遇到了相同的错误。 尝试闭包,这肯定会起作用,函数没有返回类型,你不能使用 let healthdata ,这样。 使用闭包给了我同样的错误,并且还说 Expression 解析为一个未使用的函数就行了:healthStore?.request...,这就是为什么我首先有这个变量。

以上是关于在没有更多上下文的情况下使表达式类型模棱两可的主要内容,如果未能解决你的问题,请参考以下文章

表达式“[”的类型在没有更多上下文的情况下是模棱两可的

如何修复“表达式类型'@lvalue CGRect/CGSize'在没有更多上下文的情况下模棱两可”?

Swift for 循环“表达式类型 '[[String : String]]' 在没有更多上下文的情况下模棱两可

表达式类型“()”在没有更多上下文的情况下是模棱两可的

表达式类型 bool 在没有更多上下文的情况下是模棱两可的

Alamofire 类型的表达式在没有更多上下文的情况下是模棱两可的