在我的代码中,我有一个类的数组,在要通过反射获取属性的点上可能没有任何成员。 Mirror(reflecting :)需要一个实例,但是如果我还没有任何实例,那么我将如何处理这个问题。
这是苹果公司的文档显示反思的示例:
struct Point {
let x: Int, y: Int
}
let p = Point(x: 21, y: 30)
print(String(reflecting: p))
// Prints "▿ Point
// - x: 21
// - y: 30"
为简化我的情况,本质上我想做的是镜像“ Point”而不是“ p”。
有什么想法吗?
答案 0 :(得分:0)
我要自己解决这个问题,因为这只是一个全面的坏主意。我鼓励其他人出于多种原因不使用这种方法:
相反,我使用逻辑来搜索在情节提要中设置的单元格标识符。当找到与我的属性名称匹配的单元格标识符时,将文本设置为该值。该行的标题设置在情节提要中,因此可以轻松进行编辑和(手动)格式化。
这是任何有兴趣的人的代码。
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if viewOrder!.orders.count == 0 {
return nil
}
let cellIdentifier = tableColumn!.identifier.rawValue
let orderRow = viewOrder!.orders[row]
var text = ""
let mirror = Mirror(reflecting: orderRow)
for (name, value) in mirror.children {
if name == cellIdentifier {
text = "\(value)"
}
}
if let cell = orderTableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(cellIdentifier), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = text
return cell
} else {
print("Didn't create cell in column \(tableColumn!.headerCell.title): \(cellIdentifier) : \(text)")
}
return nil
}
请注意,上面的代码已针对阅读进行了优化,我相信它会更紧密。当然,我愿意就更好的方法发表意见。