dans Swift: Différence entre la Matrice de VS NSArray VS [AnyObject]
Comme le dit le titre, quelle est la différence entre la Matrice de vs NSArray vs [AnyObject]?
Aussi, ce qui est le plus recommandé façon d'aborder cette. Ce que je veux dire est recommandé, ce qui est la méthode la plus simple de mise en œuvre. Merci.
- Cela n'a rien à voir avec Xcode.
Array
n'est pas un type en lui-même, vous avez besoin d'un paramètre de type.[AnyObject]
est le même queArray<AnyObject>
, et c'est Swift intégré de type tableau.NSArray
est un Objectif-C type de classe.
Vous devez vous connecter pour publier un commentaire.
Array
est un struct, donc c'est un type de valeur en Swift.NSArray
est immuable Objective C classe, donc c'est un type de référence rapide et il est relié àArray<AnyObject>
.NSMutableArray
est la mutable sous-classe deNSArray
.Imprime:
Parce que
foo
les changements de la valeur locale dea
etbar
modifications de la référence.Il fonctionne également si vous ne
let arr
au lieu devar
comme avec d'autres types de référence.var a = a
Array
est une Swift construire, et le générique de la structure, ce qui signifie qu'il peut être un tableau de tout type (Int, String, AnyObject, etc.)[T]
est sucre syntaxique pourArray<T>
AnyObject
est un objet de n'importe quelle classe, y compris Objective-C classes.NSArray
est un Objectif-C construire que peut contenir Objective-C objet et est transparente mappé vers et à partir deArray<AnyObject>
À l'aide de la Krzak réponse, voici un exemple concret:
L'ajout de @Krzak excellente réponse, c'est pourquoi
2018-11-09 11:38:08.798088-0600 AppName[38786:10497909] * fin de l'app en raison de uncaught exception 'NSRangeException', la raison: '* -[__NSArray0 objectAtIndex:]: indice 1 au-delà des limites de vide NSArray'
et
Cette manipulation différente de l'erreur m'a aidé à comprendre la différence..... e