我正试图在一支球队总是拿球的运动中塑造控球权:homeTeamHasPossession
或awayTeamHasPossession
。只有两个选项,布尔值似乎有意义但是当我真正想要的是!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
表达不够充分吗?
答案 0 :(得分:1)
你无法toggle
,因为awayTeamHasPossession
甚至不属于属性,更不用说可变属性了。
要修复它,只需编写一个可变的计算属性!
var awayTeamHasPossession: Bool {
get { return !homeTeamHasPossession }
set { homeTeamHasPossesion = !newValue }
}
现在你可以做到:
awayTeamHasPossession.toggle()
实际上,切换awayTramHasPossession
与切换homeTeamHasPossession
是一样的不是吗?因此,另一种解决方法是编写homeTeamHasPossession.toggle()