如何从来自 REST 服务的另一个数组中匹配一个数组?
Posted
技术标签:
【中文标题】如何从来自 REST 服务的另一个数组中匹配一个数组?【英文标题】:How to conform an array from another array that comes from a REST Service? 【发布时间】:2017-07-03 22:43:23 【问题描述】:我正在尝试使用来自 REST 服务的元素创建一个 TableView,它是一个包含描述、标题、类别和图像的优惠券列表。所以我先反序列化数据,将其放入一个数组中,然后将其转换为每个部分的特定数组,但我的循环不起作用,谁能帮帮我?
这是我的代码:
var couponsTitle : [String] = []
var couponsDesc : [String] = []
var couponsCat : [String] = []
func getCoupons()
let miURL = URL(string: RequestConstants.requestUrlBase)
let request = NSMutableURLRequest(url: miURL!)
request.httpMethod = "GET"
if let data = try? Data(contentsOf: miURL! as URL)
do
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary
let parseJSON = json
let object = parseJSON?["object"] as! NSDictionary
let mainCoupon = object["mainCoupon"] as! NSArray
let coupons = object["coupons"] as! NSArray
for i in mainCoupon
self.couponsCat.append((mainCoupon[i as! Int] as AnyObject).value(forKey: "category"))
for i in coupons
self.couponsCat.append((coupons[i as! Int] as AnyObject).value(forKey: "category"))
for i in mainCoupon
self.couponsDesc.append((mainCoupon[i as! Int] as AnyObject).value(forKey: “description"))
for i in coupons
self.couponsDesc.append((coupons[i as! Int] as AnyObject).value(forKey: “description"))
for i in mainCoupon
self.couponsTitle.append((mainCoupon[i as! Int] as AnyObject).value(forKey: “name"))
for i in coupons
self.couponsTitle.append((coupons[i as! Int] as AnyObject).value(forKey: “name"))
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! HomeTableViewCell
cell.couponTitle.text = couponsTitle[indexPath.row]
cell.couponDescription.text = couponsDesc[indexPath.row].
cell.couponCategory.text = couponsCat[indexPath.row]
return cell
我最大的问题是我不知道如何将数组放入循环中,但每个部分的规范(我的意思是标题、描述、类别等)有什么想法吗?
【问题讨论】:
【参考方案1】:与其拥有三个数组(每个属性一个),为什么不为 Coupon 提供一个具有三个属性的自定义类?
class Coupon: AnyObject
var description: String
var title: String
var category: String
init(description: String, title: String, category: String)
self.description = description
self.title = title
self.category = category
如果你这样做,你可以通过做这样的事情来避免这么多循环
for coupon in mainCoupon
let description = mainCoupon["description"]
let title = mainCoupon["name"]
let category = mainCoupon["category"]
let newCoupon = Coupon(description: description, title: title, category: category)
couponsArray.append(newCoupon)
【讨论】:
非常感谢您的回答,我需要这样的东西 我只有一个问题,我必须如何声明“couponsArray”?因为我有这样的:“ var couponsArray : [String] = [] ”,它给我一个错误,上面写着:“无法将'Coupon'类型的值转换为预期的参数类型'String'。你有线索吗?这个请? 错误告诉您不能将优惠券添加到字符串数组。您评论中的示例数组声明了一个字符串数组。你需要的是一个像这样的优惠券数组,“var couponsArray: [Coupon] = []”。然后你应该可以在你的数组中添加一张优惠券。 好的,现在我在 cellForIndexPath 有一个问题,因为如果我按原样声明它:“cell.couponTitle.text = couponsTitle[indexPath.row]”会抛出这个错误:'无法分配类型'CouponsTitle'的值输入'String?''......所以我尝试过的解决方案是:“cell.couponTitle.text = couponsTitle[indexPath.row] as AnyObject as?String”,但仍然没有工作。我该如何解决?以上是关于如何从来自 REST 服务的另一个数组中匹配一个数组?的主要内容,如果未能解决你的问题,请参考以下文章
TS / JS-如果对象的属性与数组中的另一个属性相匹配,则从对象数组中获取“值”
如何从 REST API 定义多个或嵌套 json 数据的数组类型
基于来自 JSON 请求主体的另一个属性,反序列化来自 JSON 请求主体的抽象属性
如何从 WCF REST Web 服务中的改造中获取来自@Part List<MultipartBody.Part> 发布请求的文件?