2016-08-17 2 views
2

Accountという名前のNSObjectがあります。クラスにgetterメソッドとsetterメソッドを追加しましたが、値を設定して呼び出すときにはゼロになります。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 
    } 

} 

別のビューコントローラでは、変数の1つを設定して印刷しようとしています。

import UIKit 

var test: Account? 

class ViewController: UIViewController { 

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

} 

ただし、印刷するとnilと表示されます。

+2

あなたは 'Account'オブジェクトを作成したことはありません:

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

は同じです。ある時点で 'test = Account()'を実行する必要があります。 – vacawama

+0

セッターとゲッターを手動で追加するべきではありません。 'test?.firstName =" John "'と 'print(test.firstName)'を実行することでプロパティを取得/設定できます。 – dan

答えて

2

あなたはtestをオプションでAccountと宣言しました。つまり、Account?です。

何も初期化していないと仮定すると、nilのままで、nilと表示されます。あなたは(vacawamaがコメントで言ったように)追加する必要があります。この修正する

:今すぐtest

test = Account() // test no longer nil 

Account代わりのnilのインスタンスになります。

追加の例は、遊び場で:

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

しかし

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

また、あなたのゲッターとセッターは冗長です。これを行う

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

それはそれを説明する!ありがとう –

関連する問題