我知道,对于典型的面向对象编程,您不应该直接访问属性,而应该具有与该私有属性交互的函数。由于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 :(得分:2)
不,你没有。 Swift中的属性是一种灵活,成熟的抽象机制。因此,请继续使用它来定义您的公共API。无需出口制定者和吸气剂。
例如,几乎所有Apple / iOS本机框架都会导出大量公共属性。请注意,除了您提到的 property observers (即willSet
和didSet
)之外,您还可以定义 computed properties 。正如我之前所说,这是一个完整的抽象机制。