如何从函数中删除 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)
老实说,我不知道为什么它会抱怨,没有回报,而且它与任何模型或任何东西都没有关系......
技巧是将返回值转换为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)
这是效果最好的:
try await withUnsafeThrowingContinuation { (continuation: UnsafeContinuation<Void, Error>) in
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |