我实际上正在做的事情更复杂,但归根结底是能够实现函数来检测某个东西是一个元组,无论其元素的类型是什么。
这是我的方法,不起作用(请参阅最后一行的评论):
func isTuple(b: Any) -> Bool {
return b is (Any, Any)
}
let myString = "aa"
let myDouble = 1.2
isTuple((myString, myDouble)) //returns false
为什么不起作用?不应该Any
也充当元组中的“通配符”?这是一个已知的 Swift 错误吗(如果不是,我应该将其视为一个错误并报告)吗?还有其他方法可以制作吗isTupple
方法工作?
EDIT
@NateCook 的回答完全回答了原来的问题,但它并不能帮助我做我想做的事情。就是这个:
我不仅需要确定某个东西是一个元组,而且还需要将其分解为两个值,而不知道这些值的确切类型。
这是代码:
func processIfTuple(b: Any) {
if reflect(b).disposition == MirrorDisposition.Tuple {
let (first, second) = b as (Any, Any) //error when casting
process(first)
process(second)
}
}
func process(value: Any) {
...
}
processIfTuple(("aa", 1.2))
由于测试的类似原因,这不起作用b is (Any, Any)
不起作用。这次尝试投射时出现错误。这个问题能解决吗?如果不是,是否应该将其视为语言错误或缺少功能并报告?它肯定会导致大量代码重复,因为我需要测试元组的所有可能的类型对。