实例成员 'navigationItem' 不能用于类型 'MainViewController'

Instance member 'navigationItem' cannot be used on type 'MainViewController'

xcode8似乎无法摆脱这种恐惧:

编译失败并显示消息:实例成员 'navigationItem' 不能用于类型 'MainViewController'

class MainViewController: UITableViewController {

    private static var __once: () = {
                let loginButton: UIBarButtonItem = UIBarButtonItem(title: nil, style: .done, target: self, action: nil)
                MainViewController.navigationItem.rightBarButtonItem = loginButton
        }()

这是调用它的函数:

func setupRightBarButtonItem() {
            struct Static {
                static var onceToken: Int = 0
            }

            _ = MainViewController.__once

            if (AWSIdentityManager.default().isLoggedIn) {
                navigationItem.rightBarButtonItem!.title =     NSLocalizedString("Sign-Out", comment: "Label for the logout button.")
                navigationItem.rightBarButtonItem!.action =     #selector(MainViewController.handleLogout)
            }
    }

看起来您是在第一次调用 setupRightBarButtonItem 时尝试创建右栏按钮项目,但我不确定您是从哪里想到这段代码的。

消息很清楚,navigationItem 是一个实例 属性 而您正试图将其用作 class 属性.

为什么不用更直接的:

func setupRightBarButtonItem() {

    if navigationItem.rightBarButtonItem == nil {       
        navigationItem.rightBarButtonItem = 
            UIBarButtonItem(title: nil, style: .done, target: self, action: nil)    
    }

    if (AWSIdentityManager.default().isLoggedIn) {
            navigationItem.rightBarButtonItem!.title =     NSLocalizedString("Sign-Out", comment: "Label for the logout button.")
            navigationItem.rightBarButtonItem!.action =     #selector(MainViewController.handleLogout)
    } 
    // You probably need an `else` clause here to update the button if the user isn't logged in?
}