не удалось произвести диагностику для выражения, 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. Я переименовал протокол, а затем переименовал его обратно, и проблема исчезла.

Другие вопросы по тегам