在 Swift 中的表格视图中填充数据的问题
Posted
技术标签:
【中文标题】在 Swift 中的表格视图中填充数据的问题【英文标题】:Issue in populating data in table view in Swift 【发布时间】:2018-03-01 17:06:56 【问题描述】:我通过 segue 方法将一个 Any 类型的数组从一个视图控制器传递到我的表视图控制器。我有三个数组,我首先制作它的字典,然后通过 segue 将该字典传递给下一个视图控制器。我将该数组附加到另一个数组中。然后我将该附加数组传递给 cellForRow 方法以在标签中填充我的数据。但是当在单元格中打印标签的值时,它给出了 nil。我很困惑为什么它没有从数组中传递值?代码中没有错误。 我的代码是这样的,
在我的第一个视图控制器中,我将我的值附加到这样的数组中,
ItemName.append(itemName!)
ItemPrice.append(result)
ItemDescrition.append(description)
像这样制作它的字典并将其传递给segue,
let itemData : [String : Any] = [
"itemName": ItemName,
"itemPrice": ItemPrice,
"itemDescrip": ItemDescrition
]
self.performSegue(withIdentifier: "GoToOrder", sender: itemData)
segue方法是这样的,
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "GoToOrder"
let destination = segue.destination as! UINavigationController
let target = destination.topViewController as! CartViewController
target.itemData = sender as! Dictionary
在我的第二个视图控制器中,我从字典中获取值并附加到另一个数组,该数组我传递给表格视图中的 cellForRow 方法,
var itemData : [String : Any]! = nil
let resultPrice = itemData["itemPrice"]
print(resultPrice)
let itemName = itemData["itemName"] as Any
print(itemName)
let itemDescrip = itemData["itemDescrip"] as Any
nameArray.append(itemName)
descripArray.append(itemDescrip)
priceArray.append(resultPrice)
我在表视图委托中传递该数组,
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return nameArray.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CartTableViewCell
cell.dishTitleLbl.text = nameArray[indexPath.row] as? String
print(cell.dishTitleLbl.text)
cell.priceLbl.text = priceArray[indexPath.row] as? String
print(cell.priceLbl.text)
cell.dishDetailLbl.text = descripArray[indexPath.row] as? String
print(cell.dishDetailLbl.text)
// count = cell.priceLbl.text!
print(count)
cell.totalLbl.text = "1"
cell.selectionStyle = .none
cell.backgroundColor = UIColor.clear
cell.delegate = self
return cell
如何从单元格标签中的该数组中获取值?
【问题讨论】:
强烈建议创建一个自定义结构作为数据源,而不是多个数组。它使事情如此变得容易得多。 ` var itemData : [String : Any]! = nil ` 是全局变量还是局部变量?不要使用与全局变量名相同的局部变量。 我同意@vadian 你应该考虑制作一个数据对象(不一定是struct
)并制作该对象的价格和描述属性。然后只需创建该对象类型的单个数组。您可以按数组的任何属性(例如价格)对数组进行排序。在您的配置中使用带有数据源的字典可能会变得不必要地复杂。
var itemData : [String : Any]! = 零是。全局变量。 @SidMhatre
【参考方案1】:
我会以不同的方式处理这个问题。首先,我将创建一个名为 Item
的对象来存储您的所有项目数据。然后我会创建一个dataSource
,您可以使用它从应用程序中的任何位置调用数据,如下所示:
class Item : NSObject
var name : String
var price : [Int] // an array of prices
var description : String
init(_ name: String, _ price : [Int], _ description : String)
self.name = name
self.price = price
self.description = description
class ItemDataSource : NSObject
var items = [Item]()
static let sharedInstance = ItemDataSource()
private init()
任何时候您需要创建一个新的Item
,您都可以这样做:
let item = Item(“name”,[1234],”description”)
ItemDataSource.sharedInstance.items.append(item)
然后在你的 tableView
numberOfRowsInSection
你这样称呼:
ItemDataSource.sharedInstance.items.count
您可以在cellForRowAt
中获取信息,例如:
cell.nameLabel.text = ItemDataSource.sharedInstance.items[indexPath.row].name
【讨论】:
为什么是可选属性?请写一个初始化器! 我必须为结构创建一个单独的类? @杰克 在我的场景中,用户可以根据需要添加任意数量的数据,这个场景对我有好处吗? 不,您可以使用struct
或 class
,是的,ItemDataSource.sharedInstance.items
是一个与您当前正在做的非常相似的数组。
单独我必须为它上课?以及您如何在此处分配值 let item = Item() item.name = “name” ,其中的名称是什么? @杰克以上是关于在 Swift 中的表格视图中填充数据的问题的主要内容,如果未能解决你的问题,请参考以下文章