首页 > 解决方案 > 你可以在 Swift 中计算布尔属性吗?

问题描述

我正在尝试在一项运动中对控球进行建模,其中一支球队始终拥有球权: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因为表达能力不够而大惊小怪吗?

标签: swiftdesign-patternsboolean

解决方案


你不能这样做toggle,因为awayTeamHasPossession它甚至不是一个属性,更不用说一个可变的了。

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

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

现在你可以这样做:

awayTeamHasPossession.toggle()

实际上,切换和切换awayTramHasPossession是一样的,homeTeamHasPossession不是吗?所以解决这个问题的另一种方法是写homeTeamHasPossession.toggle()


推荐阅读