Convertir NSSet Swift Tableau
Dans CoreData j'ai défini un non ordonnée à plusieurs relations. Cette relation est définie dans Swift comme ceci:
@NSManaged var types : NSMutableSet
Toutefois, pour utiliser Swift à son meilleur, je veux utiliser une normale Swift tableau comme Type[]
. Cependant, CoreData m'oblige à utiliser NS(Mutable)Set
. Comment puis-je type-cast /convertir la NSSet
à Array<Type>[]
?
- double possible de Convertir NSArray Swift array
- Type-cast n'est pas possible depuis NSSet ne pas hériter de NSArray, mais vous pouvez convertir le NSArray avec
types.allObjects()
- ce n'est pas un doublon comme celui que vous faites allusion à l'est sur le NSArray et c'est NSSet. Différents types de questions différents et probablement des réponses différentes.
- oui, c'est en double, parce que le
NSSet
peut être convertiNSArray
et la solution est la même à partir de ce point. - eh bien en fait ce n'est pas vrai non plus. NSSet peuvent être convertis à un Tableau, comme indiqué dans les réponses ci-dessous. Cependant NSArray ne semble pas avoir un "simple" cast / convertir en Tableau.
- la Swift de la documentation dit ce qui suit au sujet de Cacao Types: Swift automatiquement des ponts entre les
Array
type et laNSArray
classe., et (...)dans le code Swift, vous pouvez passer uneArray
de la valeur à une méthode attend unNSArray
objet. Vous pouvez aussi jeter entre une passerelle de type et de son homologue., Je suppose que c'est tout à fait clair déclaration, source: developer.apple.com/library/prerelease/mac/documentation/Swift/..., et vous êtes les bienvenus!
Vous devez vous connecter pour publier un commentaire.
De Xcode 7.2 avec Swift 2.1.1
En fait, j'ai trouvé par procès:
Fonctionne parfaitement bien.
Le fait est que CoreData génère somethink comme:
lors de la création d'un
NSManagedObject
sous-classe de l'éditeur. Donc je me demandais si il y avait un pas très détaillé de la méthode à utiliser lefilter
méthode sans moulage. Mais alors que Swift est censé pont automatiquement entre NSSet, NSArray et de leurs homologues. J'ai donc essayé de le déclarer directement comme un Ensemble et cela fonctionne.Répondre à la question, en la convertissant en un Tableau devient trivial:
Set
structure. LeSet
n'a pasallObjects
, mais prend en charge la plupart des opérations qu'une matrice de soutien. Donc il y a moins besoin de convertir un NSSet à la matrice.Set
àArray
commelet array = Array(mySet)
Cette réponse est obsolète comme de Xcode 7.2/Swift 2.1. Voir la accepté de répondre pour une mise à jour de réponse.
Je suis actuellement à l'aide
obj.types.allObjects as Type[]
, mais qui se sent comme un hack/solution de contournement.Set
sera introduit donc une solution de contournement est très bien pour le moment.NSSet
, donc ce très set jusqu'doit être transformé en un natif Array ou le Set.Set
comme je l'explique dans ma réponse.C'est la façon dont je l'ai fait:
Ensuite, vous pouvez manipuler le tableau comme d'habitude:
for item in array {
id = item.id
}
Utiliser la carte pour obtenir un tableau comme ceci:
Vous pouvez également utiliser .sortedArray pour trier les éléments.
Swift 3:
Pour les chaînes, utilisez NSString.comparer dans le #sélecteur d'appel.