2016-10-27 2 views
0

J'ai une fonction qui prend une valeur, que j'envoie ensuite à NSUserDefaults pour la stocker dans sa liste de propriétés. Comment puis-je configurer des contraintes génériques pour que la valeur ne puisse être qu'un des types possibles acceptés pour la liste de propriétés?Comment puis-je filtrer ou avoir plusieurs options pour une fonction générique?

Je pensais quelque chose comme:

func store<T>(value: T, key: String) -> Bool where T:NSString OR T:NSData OR T:Etc{ 
    // send key, value to NSUserDefaults 
} 

qui bien sûr ne fonctionne pas.

+0

En supposant que votre retour Bool indique la réussite/échec, vous ne pourriez pas utiliser simplement un garde/autre déclaration pour tester la type? – dfd

+0

Je voudrais une erreur de compilation si la fonction est utilisée avec le mauvais type – Steals

Répondre

1

Vous pouvez créer un protocole personnalisé pour tous les types que vous souhaitez autoriser persister:

protocol CustomProtocol {} 

extension NSString: CustomProtocol {} 
extension NSData: CustomProtocol {} 
// etc. 


func store<T>(value: T, key: String) -> Bool where T: CustomProtocol { 
    // send key, value to NSUserDefaults 
}