AnyObject
est uniquement pour les types de référence (classes), Any
est pour les types valeur et référence.
Alors tu devrais y aller [String: Any]
.
Casting de type pour Any et AnyObject
Swift fournit deux types spéciaux pour travailler avec des types non spécifiques:
Any
peut représenter une instance de n'importe quel type, y compris les types de fonction.
AnyObject
peut représenter une instance de n'importe quel type de classe.
REMARQUE:
Utilisez Any
et AnyObject
uniquement lorsque vous avez explicitement besoin du comportement et des capacités qu'ils fournissent. Il est toujours préférable d'être précis sur les types avec lesquels vous prévoyez de travailler dans votre code.
À partir du langage de programmation Swift :
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
Notez également que lorsque vous travaillez avec l'API Cocoa, il est courant de recevoir un tableau d'AnyObject, car les tableaux Objective-C ne sont PAS typifiés. Vous devez donc les convertir dans le type de tableau que vous attendez.
-
EDIT: (22 décembre 2015)
Sur la dernière déclaration, notez que cela est en train de changer avec Swift 2.0 et Xcode 7.
Apple a introduit des génériques «légers» dans Objective-C, donc de nombreuses API Cocoa retournent déjà le type correct.
EDIT: (18 octobre 2016)
Notez que, depuis Swift 3.0, les Objective-C id
sont désormais importés en tant que Any
, et non plus en tant que AnyObject
.
String
,Array
etDictionary
ne sont pas des classes, pour ceux-ci utilisent Any.NSString
,NSArray
et ceNSDictionary
sont des classes, mais les versions Swift fonctionnelles de la même manière ne sont pas des classes et cela déclenche de nombreux développeurs.Que vous utilisiez
Any
ouAnyObject
dépend de votre utilisation prévue:Si votre dictionnaire sera utilisé que dans le code Swift, vous devez utiliser
Any
parce que vos types (Int
,Double
,Float
,String
,Array
etDictionary
) ne sont pas des objets.Si vous passez votre dictionnaire aux routines Objective-C qui attendent un
NSDictionary
, alors vous devriez utiliserAnyObject
.Lorsque vous
import Foundation
ouimport UIKit
ouimport Cocoa
, il est possible de déclarer votre tableau comme[String: AnyObject]
, mais dans ce cas Swift traite votreInt
,Double
,Float
littéraux commeNSNumber
, vosString
s queNSString
, vosArray
s commeNSArray
, et vos dictionnaires queNSDictionary
, tous sont des objets. Un dictionnaire utilisantAnyObject
comme type de valeur est convertible enNSDictionary
, mais un dictionnaire utilisantAny
ne l'est pas.la source
Selon la documentation Swift d'Apple,
Pour plus de détails, veuillez consulter ceci: Blog
la source
Vérifiez cette réponse SO :
la source