假设我收到了像这样的 JSON 响应:
{
"product_list" = (
{
"product_id" = 33;
"product_image" = (
);
"product_sku" = asdasd;
"product_title" = "Product 1";
},
{
"product_id" = 58;
"product_image" = (
);
"product_sku" = kkkk222;
"product_title" = p1;
},
{
"product_id" = 119;
"product_image" = (
);
"product_sku" = 123456;
"product_title" = product;
},
{
"product_id" = 120;
"product_image" = (
);
"product_sku" = 456789;
"product_title" = "product 3";
}
);
"xxx_api" = "product_information";
}
这就是我使用 cellForRowAt indexPath 来填充表的 Cell 的方法。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: SpecificCatagoryBodyCell = tableView.dequeueReusableCell(withIdentifier: "SpecificCatagoryBodyCell") as! SpecificCatagoryBodyCell
let categoryList = sCategory[indexPath.row]
cell.product_id.text = String(categoryList.product_id)
cell.sCategoryName.text = categoryList.product_title
let profileImage = categoryList.product_image
SDWebImageManager.shared().downloadImage(with: profileImage, options: [], progress: nil) { downloadedImage, error, cacheType, isDownloaded, url in
cell.sCategoryImage.image = downloadedImage
}
return cell
}
如果我想填充 tableView 的单元格,一切都会好的。问题有时我需要使用不同的数据来进行任何调用,假设我需要来自 JSON 响应的 product_id 并使用相应的号码进行调用。如何在 tableView 索引之外提取数字,可以在函数中提取它,将其存储在变量中并使用它。这是我提供的视觉以便更好地理解。在第一张图片中,您可以看到表格中有单元格
当我点击单元格时,它会转到不同的 ViewController ,所以当我点击单元格时,它会通过 单元的product_id ,并使用 product_id 进行另一次发布调用,以显示产品的详细信息。这是下面的产品详细信息页面。
希望有意义。如果您需要,我很乐意提供更多详细信息。很多人都提前感谢。
答案 0 :(得分:1)
我可能在这里遗漏了一些细节,但是......
你的问题"就是你可以有多个categoryList
个项目出现...这就是我猜你首先使用UITableView
的原因。
在UITableView
解决方案#34;我现在应该显示哪个元素",由cellForRowAt
传递给您。在该功能中,您只需选择与您即将填充的单元格匹配的JSON
项目。
您可以致电:
let categoryList = sCategory[indexPath.row]
我认为sCategory
是categoryList
项的数组,然后您要求匹配indexPath.row
。{/ p>
因此,如果您想使用product_id
阵列中特定产品的sCategory
,则需要知道您的阵列中的哪个产品使用。
这可以通过多种方式完成。
您已经知道要使用哪个索引
在这种情况下,给您product_id
的简单方法可能如下所示:
func productId(fromIndex index: Int) -> Int? {
guard sCategory.count > index else { //just a check to make sure the index actually exists in your collection
return nil
}
return sCategory[index].product_id
}
像这样使用:
if let productId = productId(fromIndex: someIndexYouAlreadyKnow) {
//You're in business :)
}
您不知道使用哪个索引
在这种情况下,你需要知道要查找,假设您知道product_title
且product_title
是唯一的。
然后您可以编写如下函数:
func productId(forTitle productTitle: String) -> Int? {
let candidates = sCategory.filter { $0.product_title == productTitle}
guard candidates.count == 1 else { //assure that we have exactly one hit
return nil
}
return candidates.first!.product_id
}
您可以这样使用:
if let productId = productId(forTitle: "Product 1") {
//You're in business :)
}
你说
所以当我点击Cell时,我想要通过相应单元格的product_id并使用该product_id进行另一次调用以显示产品的详细信息。
我可以看到您已经问过这个问题:how do I change an image by selecting a cell in CollectionView
这里的答案几乎相同:)
UITableView
有一个UITableViewDelegate
就像UICollectionView
有UICollectionViewDelegate
一样。 UITableViewDelegate
可以选择实施的方法之一是tableView(_:didSelectRowAt:),它甚至会为您提供所选行的indexPath
。
因此,如果您拥有我之前建议的方法productId(fromIndex: )
,您可以按照
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let productId = productId(fromIndex: indexPath.row) {
//you now have the productId matching the selected row, use that for you further adventures :)
}
}
希望对你有所帮助。
答案 1 :(得分:0)
最后我得到了这样的解决方案
sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
sudo apt-get update
sudo apt-get install ubuntu-make