Czy korzystasz Any
lub AnyObject
zależy od zamierzonego użytku:
Jeśli słownika będą wykorzystywane wyłącznie w ramach kodu SWIFT, należy użyć Any
ponieważ wasze typy (Int
, Double
, Float
, String
, Array
i Dictionary
) nie są obiektami.
Jeśli będziesz przekazywać słownik do procedur Objective-C, które oczekują NSDictionary
, powinieneś użyć AnyObject
.
Kiedy import Foundation
lub import UIKit
lub import Cocoa
, możliwe jest, aby zadeklarować swoją tablicę jako [String: AnyObject]
, ale w tym przypadku Swift traktuje swoich Int
, Double
, Float
literałów jako NSNumber
, swoje String
s jako NSString
Twoje Array
s jak NSArray
i słowniki jako NSDictionary
, z których wszystkie są obiektami. Słownik używający AnyObject
jako typu wartości można przekonwertować na NSDictionary
, ale jeden z nich przy użyciu Any
nie jest.
Zauważ, że 'String',' Array' i 'Dictionary' nie są klasami, dla tych użyć Any. – zaph
Nor Int, Double i Float są. – Teejay
Tak, ale to zwykle oczywiste. Nie jest tak oczywiste, że 'NSString',' NSArray' i 'NSDictionary' są klasami, ale podobnie funkcjonalne wersje Swift nie są klasami, które wywołują wiele twórców. – zaph