2016-08-17 51 views
2

所以我有一个NSObject调用Account与它的一些变量。我在类中添加了getter和setter方法,但是当我尝试设置值并调用get it时,我得到nil。如何使用NSObject属性

import UIKit 


class Account: NSObject { 

    var firstName: String = "" 
    var lastName: String = "" 


    //setters 
    func setNameFirst(newName: String){ 
     firstName = newName 
    } 

    func setNameLast(newName: String){ 
     lastName = newName 
    } 

    //getters 
    func getFirstName() -> String{ 
     return firstName 
    } 

    func getLastName() -> String{ 
     return lastName 
    } 

} 

在另一个视图控制器中,我尝试设置和打印其中一个变量。

import UIKit 

var test: Account? 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     test?.setNameFirst("John") 
     print(test?.getFirstName()) 
    } 

} 

但是我在打印时得到了nil

+2

您从未创建过'Account'对象。你需要在某个时候执行'test = Account()'。 – vacawama

+0

你不应该手动添加setter和getters。您可以通过执行'test?.firstName =“John”'和print(test.firstName)''来获取/设置属性。 – dan

回答

2

您声明test作为可选Account ---这就是Account?是。

鉴于您从未将其初始化为任何内容,它将保持为nil并打印nil

要纠正这一点,你将需要添加(如vacawama在评论中说的):

test = Account() // test no longer nil 

现在test将是Account而不是nil一个实例。

附加例如,在一个游乐场:

let test : Account? 
print(test) // won't run 

let test : Account? 
test = Account() 
print(test) // prints an instance of Account 

另外,你的getter和setter方法是多余的。

这样做:

let test = Account() 
test.firstName = "First" 
print(test.firstName) // prints "First\n" 

是一样的:

let test = Account() 
test.setNameFirst("First") 
print(test.getFirstName()) // prints "First\n" 
+1

解释它!万分感谢 –