ios - 无法调用非函数类型的值'((成功 : Bool, 错误 : NSError?)抛出 -> Void)?)

标签 ios swift swift2

我更新到 Swift 2 和 Xcode 7 并运行了迁移工具。然后我得到了很多错误。我坚持的一个是这个

func authorizeHealthKit(completion: ((success:Bool, error:NSError?) throws -> Void)?)
{
    // 1. Set the types you want to read from HK Store
    let healthKitTypesToRead = (array:[
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)

        ])

    // 2. Set the types you want to write to HK Store
    let healthKitTypesToWrite = (array:[
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
        ])

    // 3. If the store is not available (for instance, iPad) return an error and don't go on.
    if !HKHealthStore.isHealthDataAvailable()
    {
        var error = NSError.self
        if( completion != nil )
        {
            completion(success:false, error:&error)
        }
        return;
    }

    // 4.  Request HealthKit authorization
    healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite as Set<NSObject>, readTypes: healthKitTypesToRead as Set<NSObject>) { (success, error) -> Void in

        if( completion != nil )
        {
            completion(success:success,error:error)
        }
    }
}

完成时出错(success:false, error&error)

有什么想法吗?

最佳答案

你像这样调用闭包:

if completion != nil  {
    completion(success: false, error: error)
}

completion 是可选的,因此您可以将其称为:

completion?(success: false, error: error)

注意 ?。它还消除了对 if completion != nil ... 的需要。

--

我注意到您定义的闭包会引发错误。如果确实如此,那么您需要像 do-try-catch block 这样的东西:

do {
    try completion?(success:false, error: error)
} catch let completionError {
    print(completionError)
}

要么,要么更改闭包,使其不会抛出错误。这是一个非常奇怪的模式。

--

还有一行内容是

var error = NSError.self

我不知道你这样做的目的是什么。您试图将什么错误传递回闭包?

如果你真的想创建你自己的 NSError 对象,你可以这样做:

let error = NSError(domain: "com.domain.app", code: 1, userInfo: [NSLocalizedDescriptionKey : NSLocalizedString("Health Data Not Available", comment: "")])

关于ios - 无法调用非函数类型的值'((成功 : Bool, 错误 : NSError?)抛出 -> Void)?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764215/

相关文章:

ios - iOS是否有“公平”的同步机制

ios - Swift NSJSONSerialization.JSONObjectWithData() 无法仅读取 "OK"字符串的数据

swift - 如何在 SKScene 中呈现 View Controller ?

swift - 下标 swift 2.2 的模糊使用

具有约束关联类型错误 "Type is not convertible"的 Swift 协议(protocol)

iOS:通过以编程方式添加约束作为唯一指示器获取 View 高度

ios - Jettisoned任务仍在多任务栏中

ios - 如何使用 TableView 项目访问 Swift 2 中的 View Controller ?

ios - 语言更改后应用程序无法启动

ios - iOS 中的 Swift : Resizing UIImage for Portrait or Landscape