Swift:将类型作为参数传递

15

在Swift中,是否可以将类型作为函数参数传递?注意:我不想传递指定类型的对象,而是类型本身。例如,如果我想要复制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个回答

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

啊,没错,就是这样。谢谢! - Aaron Hayman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接