2015-01-23 21 views
14

Kann in Swift ein Type als Funktionsparameter übergeben werden? Hinweis: Ich möchte kein Objekt des angegebenen Typs, sondern den Typ selbst übergeben. Zum Beispiel wollte, wenn ich Swifts as? Funktionalität replizieren:Swift: Pass-Typ als Parameter

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

Natürlich ist t als eine Art Pass in, aber ich würde in der Art passieren mag ich so kann ich überprüfen, gegen diese Art in der Funktionskörper.

Antwort

18

Sie können T.Type verwenden, aber Sie haben als T und nicht t würfen

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

Verwendungsbeispiel:

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

Ah, ja, die es tat. Vielen Dank! –