AnyObjectes solo para tipos de referencia (clases), Anyes 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 Anyy AnyObjectsolo 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 idahora se importan como Any, ya no como AnyObject.
String,ArrayyDictionaryno son clases, para estas se usa Any.NSString,NSArrayyNSDictionaryson clases, pero las versiones de Swift igualmente funcionales no son clases y eso hace tropezar a muchos desarrolladores.Ya sea que use
AnyoAnyObjectdepende de su uso previsto:Si va a utilizar su diccionario solamente en el código Swift, entonces debería usar
Anydebido 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 Foundationoimport UIKitoimport Cocoa, es posible declarar la matriz como[String: AnyObject], pero en este caso Swift ha tratado suInt,Double,Floatliterales comoNSNumber, susStrings comoNSString, susArrays comoNSArray, y de los diccionarios comoNSDictionary, todos los cuales son objetos. Un diccionario que usaAnyObjectcomo tipo de valor es convertible aNSDictionary, pero uno que usaAnyno 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