2015-03-17 2 views
2

Lecture de la section Type Casting du Swift Guide Je vois que j'utilise le mot-clé is pour taper les variables de contrôle.Comment vérifier si une var est un Tuple dans Swift?

func isString(test: AnyObject?) -> Bool { 
    return test is String 
} 

Il semble quand j'essayer quelque chose de similaire à vérifier un tuple contenant trois objets NSNumber, je reçois un «Tuple ne se conforme pas au protocole AnyObject. Est-il possible de vérifier si une variable contient un Tuple?

func isTuple(test: AnyObject?) -> Bool { 
    return test is (NSNumber, NSNumber, NSNumber) // error 
} 
+0

Eh bien, vous avez pas de type de retour pour fonctionner, de sorte que ce serait un bon endroit pour commencer – Ian

Répondre

2

Vous ne pouvez pas utiliser AnyObject ici parce qu'un tuple n'est pas une instance d'un type de classe.

  • AnyObject peut représenter une instance de tout type de classe.
  • Any peut représenter une instance de tout type, y compris les types de fonctions.

De The Swift Programming Guide - Type Casting

Au lieu de cela, essayez d'utiliser le type Any plus général:

func isTuple(test: Any?) -> Bool { 
    return test is (NSNumber, NSNumber, NSNumber) 
} 

isTuple("test") // false 
let tuple: (NSNumber, NSNumber, NSNumber) = (Int(), Int(), Int()) 
isTuple(tuple) // true 
2

Vous pouvez le faire de cette façon:

func isTuple(test: Any?) -> Bool{ 

    return test is (NSNumber, NSNumber, NSNumber) 
} 
+1

Ceci est redondant; il n'y a pas besoin d'une instruction supplémentaire «if» quand 'is' renvoie un' Bool' par lui-même. – AstroCB