AnyObject
только для ссылочных типов (классов), Any
как для значений, так и для ссылочных типов.
Так что вам стоит пойти на [String: Any]
.
Приведение типов для Any и AnyObject
Swift предоставляет два специальных типа для работы с неспецифическими типами:
Any
может вообще представлять экземпляр любого типа, включая типы функций.
AnyObject
может представлять экземпляр любого типа класса.
НОТА:
Используйте Any
и AnyObject
только тогда, когда вам явно необходимы поведение и возможности, которые они предоставляют. Всегда лучше конкретизировать типы, с которыми вы ожидаете работать в своем коде.
Из языка программирования Swift :
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
Также обратите внимание, что когда вы работаете с Какао API, обычно вы получаете массив AnyObject, потому что массивы Objective-C НЕ типизированы. Поэтому вам нужно привести их к типу массива, который вы ожидаете.
-
РЕДАКТИРОВАТЬ: (22 декабря 2015 г.)
В последнем утверждении обратите внимание, что это меняется в Swift 2.0 и Xcode 7.
Apple представила «облегченные» универсальные шаблоны в Objective-C, поэтому многие API-интерфейсы Cocoa теперь уже возвращают правильный тип.
РЕДАКТИРОВАТЬ: (18 октября 2016 г.)
Обратите внимание, что, начиная с Swift 3.0, Objective-C id
теперь импортируются как Any
, а не как AnyObject
.
String
,Array
иDictionary
не являются классами, для них использования любого.NSString
,NSArray
иNSDictionary
классы пока что так же функциональные версии Swift не классы и что поездки до многих дэвов.Используете ли вы
Any
илиAnyObject
зависит от вашего предполагаемого использования:Если ваш словарь будет использоваться только в пределах Swift коды, то вы должны использовать ,
Any
потому что ваши тип (Int
,Double
,Float
,String
,Array
, иDictionary
) не являются объектами.Если вы будете передавать свой словарь подпрограммам Objective-C, которые ожидают
NSDictionary
, то вам следует использоватьAnyObject
.Когда вы
import Foundation
илиimport UIKit
илиimport Cocoa
, можно объявить массив как[String: AnyObject]
, но в этом случае Swift обрабатывает вашInt
,Double
,Float
литералы , какNSNumber
, вашиString
s какNSString
, вашиArray
s какNSArray
и ваши словари , какNSDictionary
, все из которых являются объекты. Словарь, использующийсяAnyObject
в качестве типа значения, можно преобразоватьNSDictionary
, а словарь , использующийсяAny
- нет.источник
Согласно документации Apple Swift,
Для получения дополнительной информации, пожалуйста, проверьте это: Блог
источник
Отметьте этот ТАК-ответ :
источник