【发布时间】:2016-05-23 04:34:33
【问题描述】:
我想检查两个对象是否满足其中一个是一种类型,另一个是另一种类型的条件。对象的顺序无关紧要,只有类型组合。有什么好办法吗?
我想出了这个:
if let shot = o0 as? ShotGameObject ?? o1 as? ShotGameObject,
let o = o0 as? TakeDamage ?? o1 as? TakeDamage {
o.takeDamage(shot.damage)
}
或者这个:
for (o0, o1) in [(go0, go1), (go1, go0)] {
switch (o0, o1) {
case (let x as ShotGameObject, let y as TakeDamage):
y.takeDamage(shot.damage)
default: ()
}
}
第一个似乎更有效率,但重复和其他东西并不漂亮。
另一个会产生开销,通过创建一个不必要的数组,包含两组元组和一个 for 循环。
现在我想检查两种类型的许多不同组合。然后写很多像第一个这样的语句将非常难看。另一个会更好,但效率较低......
我试图想出一个通用函数来让我转换为类型的元组,但到目前为止还没有做到。
【问题讨论】: