你能在Swift中有一个计算的布尔属性吗?

时间:2018-06-16 04:17:50

标签: swift design-patterns boolean

我正试图在一支球队总是拿球的运动中塑造控球权:homeTeamHasPossessionawayTeamHasPossession。只有两个选项,布尔值似乎有意义但是当我真正想要的是!homeTeamHasPossession时,在任何地方写awayTeamHasPossession都会感到笨拙。

一个简单的答案是使awayTeamHasPossession成为函数而不是变量,但是可以选择切换其中任何一个:

var homeTeamHasPossession:Bool = true
func awayTeamHasPossession() -> Bool {
    return !homeTeamHasPossession
}

print("A: " + homeTeamHasPossession.description)    // A: true
print ("B: " + awayTeamHasPossession().description) // B: false

homeTeamHasPossession.toggle()

print("A: " + homeTeamHasPossession.description)    // A: false
print ("B: " + awayTeamHasPossession().description) // B: true

awayTeamHasPossession().toggle() // I can't do this

我错过了一些明显的东西吗?我可以在这里使用另一种模式吗?我只是挑剔!homeTeamHasPossession表达不够充分吗?

1 个答案:

答案 0 :(得分:1)

你无法toggle,因为awayTeamHasPossession甚至不属于属性,更不用说可变属性了。

要修复它,只需编写一个可变的计算属性!

var awayTeamHasPossession: Bool {
    get { return !homeTeamHasPossession }
    set { homeTeamHasPossesion = !newValue }
}

现在你可以做到:

awayTeamHasPossession.toggle()

实际上,切换awayTramHasPossession与切换homeTeamHasPossession是一样的不是吗?因此,另一种解决方法是编写homeTeamHasPossession.toggle()