将NSUndoManager与Swift 4和Xcode 10.1一起使用

将NSUndoManager与Swift 4和Xcode 10.1一起使用,swift,xcode,cocoa,swift4,Swift,Xcode,Cocoa,Swift4,我正在阅读Big Nerd Ranch为OS X book编写的Cocoa程序,我被困在第11章——与NSUndoManager合作。据我所知,NSUndoManager现在只是一个UndoManager,但我无法编译其余的示例代码 有关守则如下: class Document: NSDocument { @objc dynamic var employees: [Employee] = [] func insertObject(employee: Employee, in

我正在阅读Big Nerd Ranch为OS X book编写的Cocoa程序,我被困在第11章——与NSUndoManager合作。据我所知,NSUndoManager现在只是一个UndoManager,但我无法编译其余的示例代码

有关守则如下:

class Document: NSDocument {

    @objc dynamic var employees: [Employee] = [] 

    func insertObject(employee: Employee, inEmployeesAtIndex index: Int) {
        let undo: UndoManager = undoManager!

        undo.prepare(withInvocationTarget: self).insertObjectFromEmployeesAtIndex(employees.count)

        if !undo.isUndoing {
            undo.setActionName("Add Person")
        }
    }

    func insertObjectFromEmployeesAtIndex(index: Int) {
        let employee: Employee = employees[index]

        let undo: UndoManager = undoManager!

        undo.prepare(withInvocationTarget: self).insertObject(employee: employee, inEmployeesAtIndex: index)

        employees.remove(at: index)
    }
}
我得到的错误是两个函数中的行
undo.prepare
。错误是:

类型为“Any”的值没有成员“InsertObjectFromEmployeesIndex”

将'Any'强制转换为'AnyObject'或使用'as!'强制向下转换到更特定的类型以访问成员

查看您是否尝试了错误消息的建议?另请参见@rmaddy链接的问题似乎解决了编译器问题,但功能实际上不起作用。NSArrayController是否假设自动调用这些方法?(可能是另外一个问题?@Genu您看到的是一种键值编码方法。