не удалось произвести диагностику для выражения, Xcode 11.4, Moya
После обновления до Xcode 11.4 я начал получать эту ошибку
failed to produce diagnostic for expression please file a bug report
На:
let provider = MoyaProvider<EndPoint>(requestClosure: requestClosure)
Я обновил Мойю, но это не похоже на проблему. Прекрасно работает на предыдущих версиях Xcode.
полный код:
let requestClosure: MoyaProvider.RequestClosure = {
[unowned self] (endpoint: Endpoint, done: @escaping MoyaProvider.RequestResultClosure) in
guard let request = try? endpoint.urlRequest() else { return }
self.authenticator.authenticate(request, done: { (request) in
done(.success(request))
})
}
provider = MoyaProvider<EndPoint>(requestClosure: requestClosure
3 ответа
Я обнаружил проблему, проблемы с компиляцией Xcode 11.4 недостаточно подробны, когда дело доходит до optionals
а также generics
.
Моя версия и Swift
версия не была изменена.
Проблема с дженериками:
let requestClosure: MoyaProvider<EndPoint>.RequestClosure
Пришлось явно определять тип в замыкании, что имеет смысл, но не было требованием до Xcode версии 11.4.
let requestClosure: MoyaProvider<EndPoint>.RequestClosure = {
[unowned self] (endpoint: Endpoint, done: @escaping MoyaProvider.RequestResultClosure) in
guard let request = try? endpoint.urlRequest() else { return }
self.authenticator.authenticate(request, done: { (request) in
done(.success(request))
})
}
provider = MoyaProvider<EndPoint>(requestClosure: requestClosure
Для меня я получал эту ошибку, потому что одно из моих свойств было типа Error, и я назначал ему значение типа LocalizedError . Изменение типа свойства на LocalizedError устранило проблему.
По крайней мере, в некоторых случаях это ошибка Xcode. Я переименовал протокол, а затем переименовал его обратно, и проблема исчезла.