如何检查var是否是Swift中的元组?

时间:2015-03-17 04:20:09

标签: swift syntax tuples typechecking

阅读Swift Guide的类型转换部分,我看到我使用is关键字来键入检查变量。

func isString(test: AnyObject?) -> Bool {
    return test is String
}

似乎当我尝试类似于检查包含三个NSNumber对象的元组时,我收到一个'元组不符合协议AnyObject'。有没有办法检查变量是否包含元组?

func isTuple(test: AnyObject?) -> Bool {
    return test is (NSNumber, NSNumber, NSNumber) // error
}

2 个答案:

答案 0 :(得分:2)

你可以这样做:

func isTuple(test: Any?) -> Bool{

    return test is (NSNumber, NSNumber, NSNumber)
}

答案 1 :(得分:2)

您不能在此处使用AnyObject,因为tuple不是类类型的实例。

  
      
  • AnyObject可以表示任何类类型的实例。
  •   
  • Any可以表示任何类型的实例,包括函数类型。
  •   

来自The Swift Programming Guide - Type Casting

相反,请尝试使用更通用的Any类型:

func isTuple(test: Any?) -> Bool {
    return test is (NSNumber, NSNumber, NSNumber)
}

isTuple("test") // false
let tuple: (NSNumber, NSNumber, NSNumber) = (Int(), Int(), Int())
isTuple(tuple) // true