如何在Swift3中使用alamofire与对象映射器来映射数组中的数组?

我有以下数组,我从响应:

如何获取单个string中每个ID的操作date的值,例如:星期一,星期二,星期三….目前,我正在整个数组中获取cashPointsOperatingDays。 我如何编写Swift3代码?

使用对象映射器:

// MARK: Travel Shops Mapper class GetTravelShopsResponse: Mappable { var message: String? var status: Int? var travelShopsData: [TravelShopsResponse]? var cashCollectionsDateTimeData: [CashCollectionsDateTime]? // var threeDayForecast: [TravelShopsResponse]? required init?(map: Map) { mapping(map: map) } func mapping(map: Map) { message <- map["messages"] status <- map["status"] travelShopsData <- map["data"] } } class TravelShopsResponse: Mappable { var messages: String? var name: String? var address: String? var phoneNumber: String? var latitude: Float? var longitude: Float? var cashPointOperatingDays: [Any]? var locationid: String? required init?(map: Map) { mapping(map: map) } // Mappable func mapping(map: Map) { name <- map["name"] address <- map["address"] phoneNumber <- map["phoneNumber"] latitude <- map["latitude"] longitude <- map["longitude"] cashPointOperatingDays <- map["cashPointOperatingDays"] locationid <- map["id"] } } 

在我看来,控制器:

  // import UIKit import AlamofireObjectMapper import Alamofire class VPContactUsTravelShopsController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var travelShopsTableView: UITableView! @IBOutlet weak var showallTravelShopsLabel: UILabel! var yourArray = [Any]() var nameArray = [Any]() var addressArray = [Any]() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. getTravelShopsApiCall(URL:travelShopsURL!as URL) } // MARK: - UITableView delegates and datasources func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return yourArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if let cell = tableView.dequeueReusableCell(withIdentifier: "location", for: indexPath) as? TravelShopCustomCell { cell.travelShopName.text = self.nameArray[indexPath.row] as? String cell.addressTextView.text = self.addressArray[indexPath.row] as? String //var cashPointArray = cashPointOperatingDays["indexPath.item"] return cell } else { fatalError("Dequeueing SomeCell failed") } } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 480 } // MARK: - Get Contact Us API call func getTravelShopsApiCall(URL: URL) { Alamofire.request(URL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil) .responseObject { (response: DataResponse<GetTravelShopsResponse>) in print(response.result.value!) switch response.result { case .success: if !(response is NSNull) { // optional is NOT NULL, neither NIL nor NSNull guard let end = response.result.value else { return } DispatchQueue.main.async { //end = nullToNil(end.loginAuthenticationInfo?.accessToken) self.yourArray = end.travelShopsData! var dataArray = [Any]() print(self.yourArray) if let threeDayForecast = end.travelShopsData { for forecast in threeDayForecast { self.nameArray.append(forecast.name as Any) self.addressArray.append(forecast.address as Any) dataArray.append(forecast.cashPointOperatingDays as Any) print(forecast.name as Any) print(forecast.address as Any) print(forecast.phoneNumber as Any) print(forecast.latitude as Any) print(forecast.longitude as Any) print(forecast.cashPointOperatingDays as Any) } } // if let cashCollectionsDateTime = end.cashCollectionsDateTimeData { // for operationDetails in cashCollectionsDateTime { // self.cashPointOperatingDaysArray.append(operationDetails.day as Any) // // } // } self.travelShopsTableView.reloadData() } } else { // null } break case .failure: if let error = response.result.error as? URLError { print("URLError occurred: \(error)") } else { print("Unknown error: \(String(describing: response.result.error))") } break } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ } 

我还没有在XCode或操场上testing过这个代码,所以请检查一下。 我认为这个代码片段可以用于追加cashPointOperatingDays的数组。

 for cashPointOperatingDay in cashPointOperatingDays { cashPointOperatingDays.append(cashPointOperatingDay) } 

这应该在你的TravelShopsResponse类的声明下

  cashPointOperatingDays <- map["cashPointOperatingDays"] 

而对于检索,我们可以在tableView或者collectionView中使用cellForRow方法:

 var cashPointArray = cashPointOperatingDays["indexPath.item"] let retrieveArray = cashPointArray["operatingDay"] print(retrieveArray) 

再次,请检查你的代码。