从另一个类中的类访问变量(通过在&#34中声明变量;类名:heritage {}")

时间:2017-08-27 23:44:52

标签: swift macos class cocoa

我想访问passwordMenu的{​​{1}}属性,以检查ChangePasswordClass是否等于oldPassword。如何在password课程中使用password?我无法使用ChangePasswordClass因为它给了我错误

  

实例成员'密码'不能在类型'菜单'

上使用

Menu.swift:

Menu.password

ChangePasswordClass.swift:

import Cocoa

class Menu: NSViewController {
    //Textfields
    @IBOutlet var passwordBoxShowed: NSTextField!
    @IBOutlet var passwordBoxHidden: NSSecureTextField!
    //Menu Buttons
    @IBOutlet var connectButton: NSButton!
    @IBOutlet var changePasswordButton: NSButton!
    //Show password box
    @IBOutlet var showPasswordBox: NSButton!

    //Password show or not
    @IBAction func showPassword(_ sender: NSButton) {
        if showPasswordBox.state == 1 {
            passwordBoxHidden.isHidden = true
            passwordBoxShowed.isHidden = false
            passwordBoxShowed.stringValue = passwordBoxHidden.stringValue
        } else if showPasswordBox.state == 0 {
            passwordBoxHidden.isHidden = false
            passwordBoxShowed.isHidden = true
            passwordBoxHidden.stringValue = passwordBoxShowed.stringValue
        } else {

        }
    }
    //Password verification process
    var password = "1234"
    @IBAction func connexionTrigger(_ sender: NSButton) {
        if passwordBoxHidden.stringValue == password {
        performSegue(withIdentifier: "passwordSegue", sender: self)
        } else {
            // password error
        }
    }
    //change password process
    @IBAction func changePasswordTrigger(_ sender: NSButton) {
        performSegue(withIdentifier: "changeSegue", sender: self)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

1 个答案:

答案 0 :(得分:0)

password是类Menu的实例属性,但您用来访问它的语法是用于访问类型属性。

根据具体用例,您有两种选择:

  1. 如果密码是相同的,无论视图控制器类的实例如何,请将password声明为静态变量,您的代码将起作用。 static var password = "1234"
  2. 如果Menu类的每个实例的密码应该不同,则需要在导航到Menu实例之前传递ChangePasswordClass实例的引用。类。
  3. 此外,更改这段代码:

    if Menu.password == true {
    
    } else {
    
    }
    

    passwordString,因此无法将其与Bool进行比较,而且这种比较也没有任何意义。