7

更新到 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'
4

1 回答 1

4

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

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

于 2020-03-07T01:13:30.540 回答