2017-03-25 28 views
1

我知道,與典型的面向對象編程,你不應該對你的屬性直接放棄訪問,而是有與私有財產交互的功能。隨着事實,斯威夫特有特性的didSet訪問是有必要私有化屬性或我可以離開它沒有私有化和訪問它從它的父隨着斯威夫特的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

我只是試圖儘量保持問題的重點。如果我是讓硬幣私有財產我已經添加了一個公共getCoins()FUNC –

+0

在OOP通常你不想直接給訪問你*字段*(數據成員)。屬性的機制(在Obj-C或C#中類似)是爲了避免爲每個數據成員定義setter和getter而創建的。 – Sulthan

回答

2

不,你不知道。 Swift中的屬性是一個靈活的,成熟的抽象機制。因此,請繼續使用它來定義您的公共API。無需導出setter和getters。

例如,噸的公共屬性被幾乎所有的蘋果/ iOS原生框架導出。請記住,除了您提到的property observers(即willSetdidSet),您還可以定義computed properties。正如我之前所說,這是一個全面的抽象機制。