swift - 你可以在 Swift 中计算布尔属性吗?
问题描述
我正在尝试在一项运动中对控球进行建模,其中一支球队始终拥有球权: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
因为表达能力不够而大惊小怪吗?
解决方案
你不能这样做toggle
,因为awayTeamHasPossession
它甚至不是一个属性,更不用说一个可变的了。
要修复它,只需编写一个可变计算属性!
var awayTeamHasPossession: Bool {
get { return !homeTeamHasPossession }
set { homeTeamHasPossesion = !newValue }
}
现在你可以这样做:
awayTeamHasPossession.toggle()
实际上,切换和切换awayTramHasPossession
是一样的,homeTeamHasPossession
不是吗?所以解决这个问题的另一种方法是写homeTeamHasPossession.toggle()
推荐阅读
- c# - 选择语句:无效的列名,在 C# 中使用 Dapper
- php - 从数组 .. 中查找字符串中的所有匹配项并返回匹配项
- android - 当我在数据库中保存为时间戳的日期临近时,Firestore 是否可以向我的应用发送通知?
- matlab - 缺少 Matlab 共享库导致的错误
- android - java.io.FileNotFoundException: Permission denied - 在颤振中我得到了这个错误
- python-3.x - 无法导入 gensim 模块
- postgresql - 故障转移/切换后更改节点 IP 的可能性
- python-3.x - 列表中的一对坐标,其 y 轴相等且 x 轴彼此大或小 1
- autodesk-forge - BIM 360 无法创建现有文件的版本
- r - 多项式回归图 R