我试着在一个只有一支球队拥有球的运动中建立控球模型: homeTeamHasPossession 或 awayTeamHasPossession . 一个布尔值只有两个选项,看起来很有意义,但是写起来很笨拙 !homeTeamHasPossession 我真正的意思是 拥有 .
homeTeamHasPossession
awayTeamHasPossession
!homeTeamHasPossession
拥有
一个简单的答案是 拥有 一个函数,而不是一个变量,但是可以选择切换它们中的任何一个:
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
我是不是漏掉了一些显而易见的东西?我可以用另外一种模式吗?我是不是太挑剔了 !母队拥有 不够有表现力?
!母队拥有
你做不到 toggle 因为 awayTeamHasPossession 甚至不是一个属性,更不用说可变属性了。
toggle
要修复它,只需编写一个可变的计算属性!
var awayTeamHasPossession: Bool { get { return !homeTeamHasPossession } set { homeTeamHasPossesion = !newValue } }
现在你可以:
awayTeamHasPossession.toggle()
实际上,切换 awayTramHasPossession 与切换相同 homeTeamHasPossession 不是吗?所以另一种解决办法是 homeTeamHasPossession.toggle()
awayTramHasPossession
homeTeamHasPossession.toggle()