Generi c тип 'DataResponse' специализируется на слишком малом количестве параметров типа (получено 1, но ожидается 2) - PullRequest
4 голосов
/ 06 марта 2020

Обновление до Alamofire 4.5 нарушило синтаксис. Как мне переформатировать мой код, чтобы он работал?

Что у меня есть:

func getAllBeacons(completionHandler: @escaping ([BeaconModel]) -> ()) {
        let URL = "https://testwebapi.knowe.net/Knowe.Beacon.WebApi/beacon/GetAllByLanguage"
        let preferredLanguage = NSLocale.preferredLanguages[0]
        print(UIDevice.current.modelName)
        AF.request(URL, method: .post, parameters: ["SearchValue": preferredLanguage, "IosModelName": UIDevice.current.modelName]).responseArray { (response: DataResponse<[BeaconModel]>) in
            let beaconArray = response.result.value
            completionHandler(beaconArray!)
        }
    }

Что у меня было:

func getAllBeacons(completionHandler: @escaping ([BeaconModel]) -> ()) {
        let URL = "https://testwebapi.knowe.net/Knowe.Beacon.WebApi/beacon/GetAllByLanguage"
        let preferredLanguage = NSLocale.preferredLanguages[0]
        print(UIDevice.current.modelName)
        Alamofire.request(URL, method: .post, parameters: ["SearchValue": preferredLanguage, "IosModelName": UIDevice.current.modelName]).responseArray { (response: DataResponse<[BeaconModel]>) in
            let beaconArray = response.result.value
            completionHandler(beaconArray!)
        }
    }

Странно этот код работает, когда Я запускаю его на эмуляторе, но не на своих физических iPhone. Последнее дает мне ошибку: в модуле «Alamofire» нет члена с именем «request»

Этот проект был назначен мне, и я не знаю, какие версии Alamofire и Alamofireobjectmapper использовались. В лучшем случае было бы перейти на более ранние версии, но я не знаю, какие версии будут совместимы с прежним синтаксисом.

Я использую Xcode 11.3.1 и Swift

  pod 'Alamofire', '~> 4.5'
  pod 'AlamofireObjectMapper', '~> 5.0'
  pod 'NVActivityIndicatorView'
  pod 'SQLite.swift', '~> 0.11.4'

1 Ответ

2 голосов
/ 07 марта 2020

Alamofire 5 изменил различные *Response типы, чтобы быть вдвойне обобщенными c. То есть, generic c для типов Success и Failure. В вашем случае ваш DataResponse должен предоставить тип Error, который создается в случаях сбоя. Alamofire 5 возвращает тип AFError по умолчанию, но, поскольку responseArray является пользовательским, могут использоваться различные типы ошибок.

Кроме того, предоставленные вами определения pod не должны были обновляться до Alamofire 5, поэтому я не уверен, как вы столкнулись с этой проблемой.

...