swift - 访问结构中的数据以在 NSTableView 中使用
问题描述
我对编程很陌生,我已经坚持了一段时间。我有一个名为 Patient 的结构,其中充满了变量,例如 var FIRST: String。
我已经编写了从 JSON 检索数据并填充此结构的代码。它工作正常,我可以调用 print(Patient) 并在控制台中看到所有数据。
该结构的实例是一个二维数组,所以当我打印到控制台时,我得到 Patient(FIRST: "Bob", LAST: "Smith") Patient(FIRST: "Dave", LAST: "Evans") Patient(FIRST: “丽兹”,上一个:“泰勒”)
第一个 tableview 方法工作正常并返回计数 3。
第二个是我卡住的地方:
我宣布:
static var globalPatientInstance: [Patient] = []
然后用来自完成处理程序的数据填充它。这是第二种方法:
extension ViewController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let item = ViewController.globalPatientInstance[row]
let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
cell?.textField?.stringValue = item[(tableColumn?.identifier)!]!
return cell!
}
}
这给出了“类型‘患者’没有下标成员”
但是,如果我将行更改为:
cell?.textField?.stringValue = item.FIRST
代码将运行,我在表格视图中得到三行,每行都有不同的名称 - Bob、Dave、Liz。
获取其余数据的正确方法是什么,即 item.LAST 也显示?
感谢您的帮助,我尝试了很多不同的东西,但我真的坚持这一点。
解决方案
“类型 'Patient' 没有下标成员” - 此错误是因为您尝试将 Patient 作为数组访问。Item 是一个结构,而不是一个数组。
当你说你的结构是一个二维数组时,这没有意义。你的结构是一个结构。您的“2D”数组只是结构的全局实例变量数组。[Patient] 是一维数组。
let item = ViewController.globalPatientInstance[row] // item is now a Patient struct
let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
cell?.textField?.stringValue = item[(tableColumn?.identifier)!]! // This doesn't work because Patient is not an array, but a struct
cell?.textField?.stringValue = item.FIRST // This works because you are accessing the property of item
cell?.textField?.stringValue = item.LAST // This is to display the LAST property of item
return cell!
}
注意 - 请命名您的类属性 camelCase.. 您可以将此样式指南用作新手参考..
https://github.com/raywenderlich/swift-style-guide
另外——使用 first 和 last 是不好的属性命名约定,因为它听起来first是数组的第一个元素。我会推荐名字和姓氏。
推荐阅读
- json - 如何在 MERN 应用程序中存储和访问大型 JSON 文件?
- java - 存储有关在 java 中对对象执行的操作的数据
- javascript - 如何在服务器上运行浏览器功能?
- ios - 相同 Double 值的奇怪输出
- java - Spring 中 JPA 存储库的接口投影的最佳实践?
- php - 带有远程(docker)php 解释器的 Visual Studio Code
- c# - RegularExpressionValidator.ValidationExpression 文本应以
- java - 如何在清理和构建时解决错误
- c# - 如何在没有自定义操作的情况下升级 WPF 文件作为鼠标单击
- node.js - Heroku 上的图像损坏 - NodeJS React 应用程序