如何从NSObject类访问变量?

时间:2016-01-07 05:16:05

标签: ios swift class nsobject

我正试图在swift中学习mvc设计模式。所以我创建了名为User的模型类,如下所示:

class User: NSObject {

var email : String!
var password : String!
var profilePictureUrl : String!

init(email: String, password: String, profilePictureUrl: String) {
    super.init()

    self.email = email
    self.password = password
    self.profilePictureUrl = profilePictureUrl
}}

我正在使用另一个存储名为loginConnection的函数的类:

class loginConnection: NSObject {

class func loginUserWithEmailPassword(email: String,password: String) -> User{

    return User(email: email, password: password, profilePictureUrl: "nil")

}}

我尝试从我的loginViewController设置并获取电子邮件,密码和profilePictureUrl,但是当我打印User对象时,我总是会得到nil。

var userObj : User!

@IBAction func loginAction(sender: UIButton) {

    if userEmailTextField.text?.isEmpty != nil && userPasswordTextField.text?.isEmpty != nil{

        loginConnection.loginUserWithEmailPassword(userEmailTextField.text!, password:userPasswordTextField.text!)

    }
}

@IBAction func registerAction(sender: UIButton) {

    print("\(userObj.email) >>>>> \(userObj.password)")

}

如何从User类访问变量?

5 个答案:

答案 0 :(得分:1)

更改您的loginAction方法,如下所示

@IBAction func loginAction(sender: UIButton) {

if userEmailTextField.text?.isEmpty == false && userPasswordTextField.text?.isEmpty == false {

    self.userObj = loginConnection.loginUserWithEmailPassword(userEmailTextField.text!, password:userPasswordTextField.text!)

    print("\(userObj.email) >>>>> \(userObj.password)")
   }
}

1)您将userEmailTextField.text?.isEmptynil进行了比较,isEmpty返回Bool值。

2)您没有分配函数User返回的loginUserWithEmailPassword类型的值。

答案 1 :(得分:0)

所以你必须做以下事情: -

4.10.3 The form element

Content model:

Flow content, but with no form element descendants.

之后

var userObj : User = User()

userObj = loginConnection.loginUserWithEmailPassword(userEmailTextField.text!, password:userPasswordTextField.text!)

答案 2 :(得分:0)

您是否从loginAction调用userObj? 喜欢下面..

(function() {
    var

        htmlCanvas = document.getElementById('myCanvas'),
        context = htmlCanvas.getContext('2d');

    var background = document.getElementById('background');
    context.drawImage(background, 0, 0, window.innerWidth, window.innerHeight);

    initialize();

    function initialize() {
        window.addEventListener('resize', resizeCanvas, false);
        resizeCanvas();
    }

    function redraw() {
        context.strokeStyle = 'transparent';
        context.lineWidth = '5';
        context.strokeRect(0, 0, window.innerWidth, window.innerHeight);
        var background = document.getElementById('background');
        context.drawImage(background, 0, 0, window.innerWidth, window.innerHeight);
        var imageObj = new Image();
        imageObj.onload = function() {
            context.drawImage(imageObj, 0, 0, window.innerWidth, window.innerHeight);
        };
        imageObj.src = 'background.jpg';

    }
    function resizeCanvas() {
        htmlCanvas.width = window.innerWidth;
        htmlCanvas.height = window.innerHeight;
        redraw();
    }
})();

loginUserWithEmailPassword返回用户类对象,以便您可以使用它来访问用户类属性

答案 3 :(得分:0)

我不明白为什么这需要成为一个NSObject。通过使它成为一个结构,你可以删除init,因为它会自动出现。还删除了!在大多数情况下,除非你知道你正在做什么,否则使用隐式解包的选项是非常危险的。 Xcode还将帮助自动完成,并提供有关如何解决的好建议。如果你这样做,你会发现编译器会在运行时错误发生之前告诉你这些问题。

答案 4 :(得分:0)

您声明了User的userObj实例,但您没有通过loginUserWithEmailPassword函数返回的值进行分配。

在viewController loginAction中为您分配userObj。

@IBAction func loginAction(sender: UIButton) {

        userObj = loginConnection.loginUserWithEmailPassword("Karan", password:"karanPassword")
        self.registerAction()
    }  

现在您将获得指定的用户名和密码。

@IBAction func registerAction(sender: UIButton) {

        print("\(userObj.email) >>>>> \(userObj.password)")

    }  

我在输出窗口中输入了用户名和密码 enter image description here