swift中的类型转换元组

时间:2016-07-17 23:23:02

标签: swift swift2

我试图通过元组解包和投射多个选项而没有成功。奇怪的是,打开单个项目是有效的。 有人建议我滥用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的副本, 因为我没有转发?无论如何,详细解释如何 他们的重复本身就是有启发性的答案。

1 个答案:

答案 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