我已经制作了一个Profile类,我试图让这个viewcontroller从用户提供的信息中保存计费配置文件对象,然后将这些配置文件显示在TableView的列表中,并以用户提供的名称显示。我已经尝试了这个数组但是我决定让这个因为字典看起来更合理,因为我可以将配置文件命名为关键。并将其显示在表格中
但是,我无法使用配置文件填充表格。
任何帮助都会非常感激,我愿意尝试任何建议。我将提供一张图片和代码
var dictionary = [String:Profile]()
let profile1 = Profile()
profile1.firstNameB = firstNameBill
profile1.lastNameB = lastNameBill
profile1.emailB = emailBill
profile1.phoneB = phoneBill
profile1.address1B = address1Bill
profile1.address2B = address2Bill
profile1.zipB = zipBill
profile1.cityB = cityBill
profile1.firstNameS = firstNameShip
profile1.lastNameS = lastNameShip
profile1.phoneS = phoneShip
profile1.address1S = address1Ship
profile1.address2S = address2Ship
profile1.zipS = zipShip
profile1.cityS = cityShip
dictionary.updateValue(profile1, forKey: pName)
}
更新:仍然有点困惑,我使用以下代码创建了一个新文件,我得到了这个。
class ProfileTable: NSViewController {
@IBOutlet weak var tableView: NSTableView!
var profiles: [String: Profile] = [:]
var indices: [String] = []
override func viewDidLoad() {
indices = profiles.keys.sorted()
}
}
extension ProfileTable: NSTableViewDataSource {
func tableView(_ tableView: NSTableView, numberOfRowsInSection section: Int) -> Int {
return indices.count
}
func tableView(_ tableView: NSTableView, cellForRowAt indexPath: IndexPath) -> NSTableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyCell.self), for: indexPath) as MyCell
cell.profile = profiles[indices[indexPath.row]]!
return cell
}
}
答案 0 :(得分:0)
您可以使用数组来索引字典。您可以从字典的keys数组属性生成数组。在这里,我按键排序,但您应该提供一个闭包来按配置文件名称或其他更有意义的字段进行排序。
class V: UIViewController {
@IBOutlet weak var tableView: UITableView!
var profiles: [String: Profile] = [:]
var indices: [String] = []
override func viewDidLoad() {
indices = profiles.keys.sorted()
}
}
extension V: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return indices.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyCell.self), for: indexPath) as MyCell
cell.profile = profiles[indicies[indexPath.row]]!
return cell
}
}