"Метод" неоднозначен для поиска типов в этом контексте, Ошибка в Alamofire

Я использую Alamofire для быстрой обработки сети и столкнулся с одной странной ошибкой. Кажется, мы не можем передать метод enum в качестве параметра.
[Ошибка в параметре метода]

введите описание изображения здесь

private func apiRequest(method: Method, url: String, apiData: [String : AnyObject], completion:(finished: Bool, response: AnyObject?) ->Void) {

    Alamofire.request(method, url, parameters: apiData).responseJSON{ response in
        if let JSON = response.result.value {
            completion(finished: true, response: JSON)
        } else {
            completion(finished: false, response:nil)
        }
    }
}

7 ответов

Решение

Вы должны указать модуль для поиска типа объекта. Вызов Alamofire.Method

Вероятно, есть столкновение имен. Чтобы решить эту проблему, вы можете использовать квалифицированное имя enum (включая название модуля):

private func apiRequest(method: Alamofire.Method, ...

Я также столкнулся с этой проблемой, потому что я объявил номер одноименного протокола:

protocol SomeProtocol {
   static func someTypeMethod()
}

protocol SomeProtocol {
   init(someParameter: Int)
}

protocol SomeProtocol {
   var mustBeSettable: Int { get set }
   var doesNotNeedToBeSettable: Int { get }
}

Если эта ошибка возникла при использовании "Moya" и при соединении инфраструктуры a c, исправил ее, неявно добавив Moya.Method модуль.

var method: Moya.Method  {
    switch self {
       case .login: return .post
       case .register: return .post
    }
}

Тип Method объявлен в двух импортированных модулях. Вы должны указать модуль для использования типа. использование Alamofire.Method вместо Method,

Совет: Если вы часто используете тип, вы можете создать псевдоним типа в своем модуле (приложении):

typealias Method = Alamofire.Method

Таким образом, вам не нужно будет префикс типа с Alamofire. больше

Хотя ответ на это исправил ошибку сборки; в моем случае файл с предупреждением находился в двух разных структурах, поэтому XCode не знал, где искать. Это не было предназначением наших внутренних фреймворков, поэтому я просто удалил копию, которую больше не хотел.

Swift 4 и Alamofire 4.7

замещать HTTPMethod в Alamofire.HTTPMethod

У вас может быть класс, объявленный в двух или более местах в вашем приложении. Ошибка говорит о том, что не существует окончательного способа использования этого класса, потому что в коде есть несколько разных мест, где он объявлен.

Мне удалось решить проблему, удалив папку Alamofire в проекте pods вручную. Затем я выполняю "установку модуля", чтобы переустановить отсутствующие модули.

После этого в папке Alamofire будет значительно меньше файлов.

Я получил эту ошибку, потому что имя моей таблицы базы данных и имя класса модели были одинаковыми... Проблема решена путем переименования имени класса модели.

Измените имя типа enum на другое &...

  • Использовать $(inherited) флаг или
  • Удалить настройки сборки из цели.

Цель - > настройки здания- >ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES, тип значения Boolean, щелкните другой, измените значение на $(унаследованное) execute - обновление pod Выполнено

затем попробуйте запустить ваш проект, ошибка исчезнет! (Я пробовал в моем проекте)

enum 'XYZ'ButtonType {

}

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