Si potrebbe utilizzare farmaci generici per raggiungere questo obiettivo:
func isOptional<T>(x:T?)->Bool
{
return true
}
func isOptional<T>(x:T)->Bool
{
return false
}
Modifica
Il codice di cui sopra può essere utilizzato per sapere se una variabile è di tipo opzionale. L'unico modo che ho capito conoscere una variabile contenente un tipo è utilizzando riflessione:
var t1:Any.Type=(String?).self
var t2:Any.Type=(String).self
Mirror(reflecting: t1).description
Mirror(reflecting: t2).description
La prima chiamata a specchio dà la stringa "Mirror for Optional<String>.Type"
, e il secondo dà "Mirror for String.Type"
.
ho capito che il confronto stringa non è un modo conveniente per fare questo controllo, cercherò di nuovo di trovare qualcosa di più performante ..
Il 'OptionalProtocol' può avere alcuni buoni usi: Può essere usato per fornire [un'interfaccia * generico-less * per accedere ai valori Opzionali] (http: // stackoverflow .com/questions/27989094/how-to-unwrap-an-optional-value-from-any-type/32780793 # 32780793) e [anche il tipo wrapper] (http://stackoverflow.com/questions/32645612/check -se-variabili-è-un-optional-e-cosa-tipo-da-avvolge/32.781.143 # 32.781.143). – LopSae