Swift: Pass Type as Parameter

Можно ли передать параметр типа в качестве параметра функции в Swift? Примечание. Я не хочу передавать объект указанного типа, но вместо этого сам тип. Например, если бы я хотел реплицировать функцию Swift as?:

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

Конечно, t проходит как тип, но я хотел бы передать сам тип, чтобы я мог проверить этот тип в теле функции.

Ответы

Ответ 1

Вы можете использовать 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