使用Swift的didSet访问器,我仍然需要隐藏对属性的访问权限

时间:2017-03-25 15:58:45

标签: swift oop

我知道,对于典型的面向对象编程,您不应该直接访问属性,而应该具有与该私有属性交互的函数。由于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 

1 个答案:

答案 0 :(得分:2)

不,你没有。 Swift中的属性是一种灵活,成熟的抽象机制。因此,请继续使用它来定义您的公共API。无需出口制定者和吸气剂。

例如,几乎所有Apple / iOS本机框架都会导出大量公共属性。请注意,除了您提到的 property observers (即willSetdidSet)之外,您还可以定义 computed properties 。正如我之前所说,这是一个完整的抽象机制。