2016-05-19 21 views
2

Ich habe eine Klasse in diesen Zeilen: class MyClass<Input> und ich möchte überprüfen, ob der Input Typ ist Void oder nicht in seinem Initialisierer.Wie überprüft man, ob ein generischer Swift-Typ Void ist?

Ich habe versucht, eine Vielzahl von Dingen wie Void zu werfen (der Swift-Compiler erlaubt es aber sagt mir, dass das immer scheitert), oder is verwenden, aber ich vermisse etwas Grundlegendes hier.

Wie kann ich überprüfen, ob der generische Typ Void ist?

Antwort

5

Sie können dies tun, indem Sie die .self Werte der generischen Variablen und Void vergleichen. Hier ist ein kurzes Beispiel, dass Sie in einen Swift-Spielplatz stecken können, um zu sehen, wie es funktioniert!

import UIKit 

class MyClass<T> { 
    init() { 
     if(T.self == Void.self) { 
      print("Void!") 
     } else { 
      print("Not Void!") 
     } 
    } 
} 

// Will print Not Void 
var test = MyClass<Int>() 

// Will print Void 
var test2 = MyClass<Void>() 
+0

Awesome, danke - 'Void.self' war das fehlende Teil des Puzzles, und es macht total Sinn, dass es notwendig wäre! – aehlke

+0

Gibt es eine ähnliche Technik, die für Array-Typen funktioniert? – Shoerob

Verwandte Themen