Swift:传递类型作为参数

时间:2015-01-23 18:42:14

标签: swift types functional-programming

是否可以在Swift中传入Type作为函数参数?注意:我不想传入指定类型的对象,而是传递Type本身。例如,如果我想复制Swift的as?功能:

infix operator <-? { associativity left }
func <-? <U,T>(x:U?, t:T) -> T? {
  if let z = x as? t {
      return z
    }
  }
}

当然,t作为一个类型传入,但我想传入Type本身,以便我可以在函数体中检查该类型。

1 个答案:

答案 0 :(得分:18)

您可以使用T.Type,但必须转换为T而不是t

infix operator <-? { associativity left }
func <-? <U,T>(x:U?, t:T.Type) -> T? {
    if let z = x as? T {
        return z
    }
    return nil
}

样本用法:

[1,2, 3] <-? NSArray.self // Prints {[1, 2, 3]}
[1,2, 3] <-? NSDictionary.self // Prints nil