如果变量可以作为两种类型之一生成,我想要执行一段代码。
if let myOptional = variableToCast as! firstTypeToTryToCastAs ||
let myOptional = variableToCast as! secondTypeToTryToCastAs {
//Execute some code
}
但是,Swift(版本2.0)显然不允许这样做。我正在寻找一种方法来做到这一点,而无需创建两个单独的if
块。
我的代码只使用超类型,因此处理这两种类型的代码是相同的。但是,我不能将它强制转换为超类型,因为如果variableToCast是同样的超类型派生的许多其他可能类型之一,我不想编写执行代码。
答案 0 :(得分:2)
根据您的评论:
我的代码只使用超类型,因此代码处理两者 类型是一样的。但是,我无法将其转换为超类型,因为 如果variableToCast是其中之一,我不想编写代码来执行 其他可能的类型也派生自相同的超类型。
在可选绑定 if let
中转换为超类型,然后使用where
子句将其限制为您感兴趣的类:
class SuperType {
}
class firstTypeToTryToCastAs: SuperType {
}
class secondTypeToTryToCastAs: SuperType {
}
class thirdTypeToTryToCastAs: SuperType {
}
var variableToCast: AnyObject = firstTypeToTryToCastAs()
if let myOptional = variableToCast as? SuperType where myOptional is firstTypeToTryToCastAs || myOptional is secondTypeToTryToCastAs {
print("this works")
} else {
print("not the type we are looking for")
}
答案 1 :(得分:1)
我正在寻找一种方法来做到这一点,而无需创建两个单独的if块
为什么?
您无法在if块中使用相同的代码,因为myOptional
的类型不同。我会选择
if let myOptional = variableToCast as! firstTypeToTryToCastAs
{
// code dealing with a firstTypeToTryToCastAs
}
else if let myOptional = variableToCast as! secondTypeToTryToCastAs
{
// code dealing with a secondTypeToTryToCastAs
}
另一方面,如果您的两种类型具有共同的超类型,则将其强制转换为超类型。
答案 2 :(得分:0)
要添加到JeremyP的答案,如果你实际上并不关心myOptional的价值是什么,但只是想要执行某些代码,如果它是这两种类型中的一种,你可以这样做
if variableToCast is firstTypeToTryToCastAs || variableToCast is secondTypeToTryToCastAs {
//Code for both cases
}