我试图通过元组解包和投射多个选项而没有成功。奇怪的是,打开单个项目是有效的。 有人建议我滥用BottomSheetBehavior, 这很有可能,但我无法看到它。
任何人都可以解释为什么这不起作用吗?
class fooba { }
func unwrapPair(a: AnyObject?, _ b:AnyObject?) {
if let a = a as? fooba {
// true
}
if let b = b as? fooba {
// true
}
if let (a, b) = (a, b) as? (fooba, fooba) {
// false!?!?
}
}
unwrapPair(fooba(), fooba())
我认为这是downcast as?
operator的副本,
因为我没有转发?无论如何,详细解释如何
他们的重复本身就是有启发性的答案。
答案 0 :(得分:1)
不是单独尝试将每个组件与if-let组合匹配,而是可以以更快捷的方式执行相同操作:
switch (a, b) {
case (let a as String, _):
// Do whatever you need to do with a
return true
case (_, let b as String):
// Do whatever you need to do with b
return true
case (let a as NSNumber, let b as NSNumber):
// Do whatever you need to do with a and b
return false
default:
return true
}
另请注意,您目前无法尝试做的垂头丧气的类型 - 请看这个快速的错误:tuple 'as?' downcast broken