通用类型“DataResponse”专门使用太少的类型参数(得到 1,但预期为 2)

6 xcode cocoapods swift alamofire alamofire-request

更新到 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!)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有什么:

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!)
        }
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我在模拟器上运行该代码时,该代码有效,但在我的物理 iPhone 上却无效。后者给了我一个错误:模块“Alamofire”没有名为“请求”的成员

这个项目是分配给我的,不知道用的是什么版本的Alamofire和Alamofireobjectmapper。最好的情况是降级到以前的版本,但我不知道哪些版本将与以前的语法兼容。

我正在使用 Xcode 11.3.1 和 Swift

  pod 'Alamofire', '~> 4.5'
  pod 'AlamofireObjectMapper', '~> 5.0'
  pod 'NVActivityIndicatorView'
  pod 'SQLite.swift', '~> 0.11.4'
Run Code Online (Sandbox Code Playgroud)

Jon*_*ier 5

Alamofire 5 将各种类型更改*Response为双重通用。也就是说,对于 和Success类型都是通用的Failure。在您的情况下,您DataResponse需要提供Error在失败情况下生成的类型。Alamofire 5AFError默认返回类型,但由于responseArray是自定义的,因此使用中可能存在不同的错误类型。

顺便说一句,pod您提供的定义不应该能够升级到 Alamofire 5,所以我不确定您是如何遇到这个问题的。

  • 知道如何处理这个双重通用&gt; (2认同)
  • @Anuraj您可以使用`AFDataResponse`或`AFDownloadResponse`类型使其与`AFError`错误类型通用。但如果您想要不同的错误类型,则需要处理这两种类型。 (2认同)