2017-03-25 13 views
1

典型的なオブジェクト指向プログラミングでは、プロパティに直接アクセスするのではなく、そのプライベートプロパティと対話する関数を持つべきです。スウィフトは、プロパティのdidSetアクセサを持っていることがそのプロパティを民営化する必要があるか、私はそれからそれをそれが民営ないままにしてアクセスすることができるという事実を持つ親SwiftのdidSetアクセサでは、まだプロパティへのアクセスを非表示にする必要がありますか?

private var coins: Int = 0 { 
    didSet { 
     coinsLabel.text = "\(coins)" 
    } 
} 

func setCoins(amount: Int) { 
    coins = amount 
} 

func getCoinsAmount() { 
    return coins 
} 

//Setting the value from the parent 
gameHUD.setCoins(amount: 50) 

//retrieving the value from the parent 
let coins = gameHUD.getCoinsAmount() 

ですか、それは悪い習慣であるだけで民営ないコインを残すようにし、親から直接セット/取得する

gameHUD.coins = 50 
let coins = gameHUD.coins 
+0

'coins'を読むための公開方法は提供していないので、設定してください。それはあなたが欲しいものですか? – rmaddy

+0

私はできるだけ集中して質問を続けようとしていました。私がコインのプロパティをプライベートにする場合は、public getCoins()funcを追加しました –

+0

OOPでは通常、フィールド*(データメンバー)に直接アクセスする必要はありません。プロパティのメカニズム(Obj-CまたはC#に似ています)は、すべてのデータメンバーのセッターとゲッターを定義しないように正確に作成されました。 – Sulthan

答えて

2

いいえ、あなたはしません。 Swiftのプロパティは、柔軟で成熟した抽象化メカニズムです。そのため、先に進んでパブリックAPIを定義してください。セッターとゲッターをエクスポートする必要はありません。

たとえば、ほとんどのApple/iOSネイティブフレームワークで公開されている多数のパブリックプロパティがエクスポートされます。上記のproperty observerswillSetdidSet)の他に、computed propertiesを定義することもできます。前にも述べたとおり、これは本格的な抽象化メカニズムです。

関連する問題