无返回的异步/等待函数 | 雨燕5.5

ElK*_*PoN 14 swift swiftui

如何从函数中删除 Bool 返回而不出现错误:

Generic parameter 'T' could not be inferred
Run Code Online (Sandbox Code Playgroud)

这是函数:

private func syncDataStore() async throws -> Bool {
    try await withUnsafeThrowingContinuation { continuation in
        Amplify.DataStore.stop { (result) in
            switch(result) {
            case .success:
                Amplify.DataStore.start { (result) in
                    switch(result) {
                    case .success:
                        print("DataStore started")
                        continuation.resume(returning: true)
                    case .failure(let error):
                        print("Error starting DataStore:\(error)")
                        continuation.resume(throwing: error)
                    }
                }
            case .failure(let error):
                print("Error stopping DataStore:\(error)")
                continuation.resume(throwing: error)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我尝试做的,但我收到上面提到的错误:

private func syncDataStore() async throws {
    try await withUnsafeThrowingContinuation { continuation in
        Amplify.DataStore.stop { (result) in
            switch(result) {
            case .success:
                Amplify.DataStore.start { (result) in
                    switch(result) {
                    case .success:
                        print("DataStore started")
                        continuation.resume()
                    case .failure(let error):
                        print("Error starting DataStore:\(error)")
                        continuation.resume(throwing: error)
                    }
                }
            case .failure(let error):
                print("Error stopping DataStore:\(error)")
                continuation.resume(throwing: error)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道为什么它会抱怨,没有回报,而且它与任何模型或任何东西都没有关系......

Sir*_*eck 9

技巧是将返回值转换为withUnsafeThrowingContinuationto Void,如下所示:

try await withUnsafeThrowingContinuation { continuation in
    someAsyncFunction() { error in
        if let error = error { continuation.resume(throwing: error) }
        else { continuation.resume() }
    }
} as Void
Run Code Online (Sandbox Code Playgroud)


ElK*_*PoN 7

这是效果最好的:

try await withUnsafeThrowingContinuation { (continuation: UnsafeContinuation<Void, Error>) in
Run Code Online (Sandbox Code Playgroud)