AnyObject
es solo para tipos de referencia (clases), Any
es tanto para tipos de valor como de referencia.
Entonces deberías ir a por [String: Any]
.
Conversión de tipos para Any y AnyObject
Swift proporciona dos tipos especiales para trabajar con tipos no específicos:
Any
puede representar una instancia de cualquier tipo, incluidos los tipos de función.
AnyObject
puede representar una instancia de cualquier tipo de clase.
NOTA:
Use Any
y AnyObject
solo cuando necesite explícitamente el comportamiento y las capacidades que brindan. Siempre es mejor ser específico sobre los tipos con los que espera trabajar en su código.
Desde el lenguaje de programación Swift :
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
También tenga en cuenta que cuando trabaja con Cocoa API, es común recibir una matriz de AnyObject, esto se debe a que las matrices Objective-C NO están tipificadas. Por lo tanto, debe convertirlos en el tipo de matriz que espera.
-
EDITAR: (22 de diciembre de 2015)
En la última declaración, tenga en cuenta que esto está cambiando con Swift 2.0 y Xcode 7.
Apple ha introducido genéricos 'ligeros' en Objective-C, por lo que muchas API de Cocoa ahora ya devuelven el tipo correcto.
EDITAR: (18 de octubre de 2016)
Tenga en cuenta que, a partir de Swift 3.0, los Objective-C id
ahora se importan como Any
, ya no como AnyObject
.
String
,Array
yDictionary
no son clases, para estas se usa Any.NSString
,NSArray
yNSDictionary
son clases, pero las versiones de Swift igualmente funcionales no son clases y eso hace tropezar a muchos desarrolladores.Ya sea que use
Any
oAnyObject
depende de su uso previsto:Si va a utilizar su diccionario solamente en el código Swift, entonces debería usar
Any
debido a sus tipos (Int
,Double
,Float
,String
,Array
, yDictionary
) no son objetos.Si va a pasar su diccionario a las rutinas de Objective-C que esperan un
NSDictionary
, entonces debería usarAnyObject
.Cuando
import Foundation
oimport UIKit
oimport Cocoa
, es posible declarar la matriz como[String: AnyObject]
, pero en este caso Swift ha tratado suInt
,Double
,Float
literales comoNSNumber
, susString
s comoNSString
, susArray
s comoNSArray
, y de los diccionarios comoNSDictionary
, todos los cuales son objetos. Un diccionario que usaAnyObject
como tipo de valor es convertible aNSDictionary
, pero uno que usaAny
no lo es.fuente
Según la documentación Swift de Apple,
Para obtener más detalles, consulte esto: Blog
fuente
Marque esta respuesta SO :
fuente