我正试图在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类访问变量?
答案 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?.isEmpty
与nil
进行了比较,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)")
}