2016-08-17 88 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

解釋它!萬分感謝 –