使用字典键和值将数据加载到UITableView时出现的Swift问题

使用字典键和值将数据加载到UITableView时出现的Swift问题,swift,xcode,uitableview,dictionary,Swift,Xcode,Uitableview,Dictionary,我是开发应用程序的初学者,我正在尝试使用Xcode/Swift创建我的第一个真正的应用程序 我遇到的问题是设置一个表视图来显示某些信息。我已经成功地创建了其他表视图,但这一个稍微复杂一些。我先把它分解一下 我有一个变量,它通过一个名为var receivedselection=(choice:,choiceValue:0.0)的序列接收数据。“choice”是选择的名称,“choiceValue”是选择的成本 然后,我使用以下代码行将此数据存储到名为var dict:[String:Double

我是开发应用程序的初学者,我正在尝试使用Xcode/Swift创建我的第一个真正的应用程序

我遇到的问题是设置一个表视图来显示某些信息。我已经成功地创建了其他表视图,但这一个稍微复杂一些。我先把它分解一下

我有一个变量,它通过一个名为
var receivedselection=(choice:,choiceValue:0.0)的序列接收数据。
“choice”是选择的名称,“choiceValue”是选择的成本

然后,我使用以下代码行将此数据存储到名为
var dict:[String:Double]=[“”:0.0]
的字典数组中:

self.dict[self.recievedSelection.choice] = self.recievedSelection.choiceValue
我有一个表视图,所有的表视图都设置了委托方法等,并且
dequeueReusableCellWithIdentifier(“basic”,forIndexPath:indexPath)
。numberOfSectionInTableView返回1,numberOfRowsInSection返回self.dict.count

我遇到的问题是使用self.dict的每个“键”的数据设置为
单元格.textlab?.text
,使用self.dict的每个“值”的数据设置为
单元格.detailtextlab?.text
,这样当tableView加载时,该选择的名称和价格在每个单元格中都是可见的。一旦用户做出了所有选择/选择,因为整个应用程序中会有一些选择/选择,那么应该有一个可以在此表视图中查看的选择/选择列表

然后,在计算总金额的表视图下方的底部有一个“合计”金额

我还设置了表视图来删除单个单元格,当一个单元格被删除时,该单元格中设置的金额/价格将从屏幕底部的总额中扣除

我正在使用
NSUserDefaults
保存加载到表视图中的数据,因为没有存储任何个人数据,这只是一个简短的估计

但问题是,我无法让表视图将“self.dict”的值和键同时加载到表视图
textlab
detailtextlab


我希望这是有道理的!非常感谢您的帮助。

我假设您希望从字典中获取UITableViewDataSource的值。数组会更好,您可能会更改代码,将其用于UIViewController的数据,但如果必须,请首先将字典的一组键放入数组:

var myDataSource = Array(self.dict.keys)
每次从字典中编辑/删除时,在调用tableView.reloadData()之前重新指定此值,以避免索引越界崩溃。现在,在数据源方法中,您可以检查

self.dict[myDataSource[indexPath.row]]

这将为您提供行数所需的数组大小,以及字典中所需的值和键。如果愿意,还可以使用以下命令迭代字典的键和值:

for (key, value) in self.dict {
    //do something
}

从你的问题中,我不能完全确定是什么导致了问题,也就是说,我不能确定你没有得到什么价值。但是,您可以使用以下方法获得这些值:

let keyArray = dict.allKeys 
然后在cellForIndexPath中:

cell.textLabel.text? = keyArray[indexPath.row] //the "key"'s Value
cell.detailtextLabel.text? = dict[keyArray[indexPath.row]] // the "value"s value

希望这有助于解决您的问题?

虽然您的帖子很全面,但我仍在努力了解您的实际问题。说“不起作用”是不够的。您能提供一些示例吗?您尝试了什么,得到了什么结果,以及您实际想要的是什么?因此,您希望获得字典中的每个条目,并使用一个整数值(indexPath.row)?谢谢您的回复。使用tableView上面的代码可以将键加载到tableView中,但是我在将值数据作为detailTextLabel加载到单元格中时遇到问题。我已将以下内容放入CellForRowatineXpath-func tableView(tableView:UITableView,CellForRowatineXpath indexPath:NSIndexPath)->UITableViewCell{let cell=tableView.dequeueReusableCellWithIdentifier(“basic”,forIndexPath:indexPath)var myDataSource=Array(sel.dict.keys)cell.textLabel!.text=myDataSource[indexPath.row]cell.detailTextLabel?.text=self.dict[myDataSource[indexPath.row]]cell.accessoryView=UIImageView(图像:UIImage(命名为:“垃圾桶”\u empty”)!)cell.accessoryView!。frame=CGRectMake(0,0,22,22)返回单元格}如果这是错误的,我深表歉意。行单元格.detailTextLabel?.text=self.dict[myDataSource[indexPath.row]]给你?我得到一个错误,对成员下标的引用不明确。我将尝试下面的代码。因此,你需要将UITableViewCell转换为具有detailTextLabel的自定义类。你可以通过让cell:myCustomCellType=tableView.dequeueReusableCellWithIdentifier(“basic”,forIndexPath:indexPath)来执行此操作as!myCustomCellType。您拥有的代码将为您提供一个通用的UITableViewCell,这意味着'cell.detailTextLabel?.text'不会实际分配值。这给了我一个类型为“[string:Double]”的错误值,没有成员'allKeys',很抱歉,它实际上是dict.keys。现在,swift3更改还没有完全解决我的问题,哈哈
let keyArray = dict.allKeys 
cell.textLabel.text? = keyArray[indexPath.row] //the "key"'s Value
cell.detailtextLabel.text? = dict[keyArray[indexPath.row]] // the "value"s value