Swift 快速检查两个元素是否满足类型组合
我想检查两个对象是否满足其中一个是一种类型,另一个是另一种类型的条件。对象的顺序无关紧要,只有类型组合。有什么好办法吗 我想到了这个:Swift 快速检查两个元素是否满足类型组合,swift,generics,Swift,Generics,我想检查两个对象是否满足其中一个是一种类型,另一个是另一种类型的条件。对象的顺序无关紧要,只有类型组合。有什么好办法吗 我想到了这个: if let shot = o0 as? ShotGameObject ?? o1 as? ShotGameObject, let o = o0 as? TakeDamage ?? o1 as? TakeDamage { o.takeDamage(shot.damage) } 或者这个:
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循环
现在可能有很多不同的两种类型的组合,我想检查一下。那么,像第一次那样写很多陈述会非常难看。另一个会更好,但效率更低
我试图提出一个泛型函数来强制转换为一个类型元组,但到目前为止还无法做到这一点。这里有一个泛型函数来强制转换为一个类型元组
func tupleTypeChecker<T,U>(lhs: Any, rhs: Any) -> (T, U)? {
switch (lhs, rhs) {
case let (lhs as T, rhs as U): return (lhs, rhs)
case let (lhs as U, rhs as T): return (rhs, lhs)
default: return nil
}
}
这里有一个用于转换为类型元组的通用函数
func tupleTypeChecker<T,U>(lhs: Any, rhs: Any) -> (T, U)? {
switch (lhs, rhs) {
case let (lhs as T, rhs as U): return (lhs, rhs)
case let (lhs as U, rhs as T): return (rhs, lhs)
default: return nil
}
}