AnyObject
dotyczy tylko typów referencyjnych (klas), Any
dotyczy zarówno typów wartości, jak i typów referencyjnych.
Więc powinieneś iść [String: Any]
.
Typ rzutowania dla Any i AnyObject
Swift udostępnia dwa specjalne typy do pracy z typami niespecyficznymi:
Any
może w ogóle reprezentować instancję dowolnego typu, w tym typy funkcji.
AnyObject
może reprezentować instancję dowolnego typu klasy.
UWAGA:
Używaj Any
i AnyObject
tylko wtedy, gdy wyraźnie potrzebujesz zachowania i możliwości, które zapewniają. Zawsze lepiej jest dokładnie określić typy, z którymi zamierzasz pracować w swoim kodzie.
Z języka programowania Swift :
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
Należy również zauważyć, że podczas pracy z interfejsem API Cocoa często otrzymuje się tablicę AnyObject, ponieważ tablice Objective-C NIE są typowane. Musisz więc rzutować je na oczekiwany typ tablicy.
-
EDYCJA: (22 grudnia 2015 r.)
W ostatnim oświadczeniu zwróć uwagę, że zmienia się to w przypadku Swift 2.0 i Xcode 7.
Firma Apple wprowadziła „Lekkie” typy generyczne w Objective-C, więc wiele interfejsów API Cocoa zwraca już prawidłowy typ.
EDYCJA: (18 października 2016 r.)
Należy zauważyć, że od wersji Swift 3.0 obiekty Objective-C id
są teraz importowane jako Any
, a nie już jako AnyObject
.
String
,Array
iDictionary
nie są zajęcia dla tych użyć dowolnego.NSString
,NSArray
iNSDictionary
to są klasy, ale podobnie funkcjonalne wersje Swift nie są klasami i to wyzwala wielu programistów.Niezależnie od tego, czy używasz,
Any
czyAnyObject
zależy od zamierzonego zastosowania:Jeśli słownik będą wykorzystywane wyłącznie w ramach kodu SWIFT, należy użyć
Any
ponieważ wasze typy (Int
,Double
,Float
,String
,Array
, iDictionary
) nie są obiektami.Jeśli będziesz przekazywać swój słownik do procedur Objective-C, które oczekują an
NSDictionary
, powinieneś użyćAnyObject
.Kiedy
import Foundation
alboimport UIKit
czyimport Cocoa
możliwe jest, aby zadeklarować swoją tablicę jako[String: AnyObject]
, ale w tym przypadku Swift traktuje swojeInt
,Double
,Float
literały jakNSNumber
twojeString
s jakNSString
, twoiArray
s jakNSArray
i twoi jak słownikiNSDictionary
, z których wszystkie są obiektami. Słownik używającyAnyObject
jako typu wartości jest konwertowany naNSDictionary
, ale używanyAny
nie.źródło
Zgodnie z dokumentacją Apple Swift,
Aby uzyskać więcej informacji, sprawdź to: Blog
źródło
Sprawdź tę odpowiedź :
źródło