Как я могу удалить возврат Bool из моей функции без получения ошибки:
Generic parameter 'T' could not be inferred
Это функция:
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)
}
}
}
}
Вот что я пытался сделать, но получаю указанную выше ошибку:
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)
}
}
}
}
Честно говоря, я не знаю, почему он жалуется, возвратов нет и он не привязан ни к какой модели или чему-то еще...
Что произойдет, если вы укажете тип
continuation
явно?(continuation: UnsafeContinuation<Bool, Error>) in
Я ожидаю, что ошибка изменится на что-то более полезное, а лучше вообще исчезнет.@Sweeper это ушло так:
(continuation: UnsafeContinuation<Void, Error>) in
однако это выглядит слишком долго, разве нет лучшего способа?Я думаю, основная причина в том, что операторы, которые вы помещаете в замыкание, слишком сложны, и вывод типа просто сдается. Вы можете попробовать обернуть
stop
иstart
в асинхронные функции отдельно, тогда написать асинхронную функцию дляsyncDataStore
будет тривиально.На самом деле асинхронные функции, возвращающие
Void
, должны быть возможны. Попробуйте изменить его на-> Void
.@Sweeper, который не сработал