2014-06-06 1 views
2

Comme Anonymous Types in C#. Est-ce que les Tuples dans le langage récemment lancé Swift peuvent faire ce que les types anonymes en C# peuvent faire?Les tuples dans Swift sont-ils une alternative complète aux types anonymes comme dans C#

Bien que rapide, j'apprentissage trouvé quelques déclarations (Ils l'appellent Tuples) comme

let http200Status = (statusCode: 200, description: "OK") 

Et nous pouvons y accéder de manière comme

println("The status code is \(http200Status.statusCode)") 
// prints "The status code is 200" 
println("The status message is \(http200Status.description)") 
// prints "The status message is OK” 

Il se sent exactement comme types anonymes en C# .

Est-ce que Tuple dans Swift est une alternative complète aux types anonymes en C#? Quelqu'un peut-il me donner une comparaison des types Tuples et Anonymous? Ce que je peux faire dans un et ne peux pas faire dans l'autre. J'ai trouvé une chose jusqu'ici qu'en C#, nous ne pouvons pas retourner les types Anonymes (sauf comme objet) mais nous pouvons le faire dans Swift.

+1

Tuple est un objet de collection immuable. Le type anonyme est un moyen d'instancier un objet. ce sont deux sujets différents. – Franck

+1

@Franck Les tuples ne sont pas strictement immuables dans Swift, cela dépend de 'let' vs' var'. – Erik

Répondre

2

Les tuples dans Swift sont un peu un hybride entre les types anonymes de C# et les classes génériques Tuple<T1, T2, ...>.

Comme avec C# types anonymes, Swift permet de nommer les « propriétés » du tuple si vous le souhaitez (cependant, il est seulement en option):

let result = (errorCode: 9001, message:"Power level too high!")

Il vous permet également d'extraire certains des valeurs tout en ignorant les autres quand les récupérer:

let (errorCodeOnly, _) = result

Il est important de noter que l'immuabilité de Swift tuples est déterminée par var vs let.

let immutableCard = (suit: "Spades", rank: "Ace") 
var mutableCard = (suit: "Hearts", rank: "Queen") 

immutableCard.rank = "Jack" // error, cannot set 
mutableCard.rank = "Two"  // OK