Przekazałem parametr do funkcji typu AnyObject, ponieważ wszystko można przekazać do niego. Czy istnieje sposób dynamicznego uzyskania typu obiektu?Uzyskaj dynamicznie typ AnyObject w Swift
Odpowiedz
Zazwyczaj to właśnie leki generyczne są przeznaczone. Istnieje rzadko dobry powód, aby kod AnyObject
nie wchodził w interakcje z ObjC. Jeśli wykonujesz różne akcje w zależności od typu, prawdopodobnie masz zamiar użyć przeciążenia.
To powiedziawszy, istnieje kilka sposobów uzyskania dostępu do typu. Zwykle chcesz uruchomić inny kod w zależności od typu, dzięki czemu można używać switch
na to:
let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}
lub
let x:AnyObject = "asdf"
switch x {
case let xString as String: println("I'm a string: \(xString)")
default: println("I'm not a string")
}
Albo można użyć, jeśli:
if let string = x as? String {
println("I'm a string: \(string)")
}
Zobacz "Typ Cast Cast Any Any i AnyObject" w Swift Programming Language, aby uzyskać więcej informacji.
Ale znowu, jeśli nie pracujesz z kodem ObjC, rzadko pojawia się powód, aby używać Any
lub AnyObject
. Generics i przeciążenia są narzędziami zaprojektowanymi do rozwiązania tych problemów w Swift.
Fundacja Pierwszy import
a jeśli wa typ test1 zrobić:
var test1 = "test"
println(_stdlib_getTypeName(test1))
Dostaniesz "TST" TST oznaczać String.
jeśli chcesz spróbować z Int byłoby TtSi (i dla int)
Należy pamiętać, że te nazwy typów są prywatne i mogą ulec zmianie w dowolnym momencie. Główny znak podkreślenia w nazwie funkcji jest wskaźnikiem firmy Apple, że jest to funkcja wewnętrzna, której nie można wywołać spoza stdlib. –
Użycie nierozwiązanego identyfikatora "_stdlib_getTypeName" – Sander
Nie jest jasne, co masz na myśli przez "typ" w pytaniu. Dla dowolnej wartości dowolnego typu w Swift można uzyskać typ dynamicznego środowiska wykonawczego:
theVariable.dynamicType
Co można z tym zrobić, to kolejne pytanie.
Swift 3 wersja z odrobiną @jojodmo „s:
type(of: theVariable)
Powinien to być adres poczty elektronicznej dla tego pytania. –
W Swift 3, został zmieniony na 'type (of: theVariable)' – Jojodmo
func testType(value:AnyObject!){
if let v = value as? NSString{
println("NSString")
}else if let v = value as? NSNumber{
println("NSNumber")
}else if let v = value as? Double{
println("Double")
}else if let v = value as? Int{
println("Int")
}
}
Proszę dodać wyjaśnienie. –
- 1. Konwersja [NSObject, AnyObject] na [String, AnyObject] w Swift
- 2. AnyObject i Any in Swift
- 3. Typ kontekstowy "AnyObject" nie może być użyty z literałem słownikowym?
- 4. Indeks dolny Swift AnyObject, skąd się wziął?
- 5. Swift: Uzyskaj liczbę kluczy w słowniku
- 6. Dopasuj typ danych obiektu w Swift
- 7. typ kontekstu „AnyObject” nie może być używany z tablicy dosłownym
- 8. Typ "OSType" nie jest zgodny z protokołem "AnyObject" w Swift 2.0
- 9. Uzyskaj typ w flex
- 10. Nie można indeks wartość typu AnyObject w Swift
- 11. Jak radzić sobie z launchOptions: [NSObject: AnyObject]? w Swift?
- 12. W Swift, jak sprawdzić, czy obiekt (AnyObject) jest ciągiem?
- 13. Uzyskaj ścieżkę trasy dynamicznie
- 14. Dynamicznie uzyskaj ramkę klawiatury
- 15. Swift: Typ kontekstowy "AnyObject" nie może być używany z literałem słownikowym
- 16. Jak przekazać typ Swift jako argument metody?
- 17. scala dynamicznie określana typ
- 18. Uzyskaj typ zmiennej w bashu
- 19. Uzyskaj typ zmiennej w MySQL
- 20. Swift - Uzyskaj listę krajów
- 21. Czy moja klasa może zastąpić typ właściwości protokołu w Swift?
- 22. C typ unii w Swift?
- 23. Uzyskaj typ parametru lambda:
- 24. Uzyskaj typ funkcji
- 25. Uzyskaj typ zmiennej
- 26. Uzyskaj typ interfejsu ogólnego?
- 27. Uzyskaj klasy nazw PHP dynamicznie
- 28. Xcode 8 beta 6 AnyObject Swift 3 zmienia
- 29. Uzyskaj funkcję według nazwy dynamicznie w Kotlin
- 30. Uzyskaj typ właściwości przez MemberExpression
chciałbym powiedzieć, że nie ma jednej odpowiedzi w tym temacie nie został mi pomóc. Mój problem polegał na tym, że nie mogę uzyskać informacji o typie podczas debugowania, aby dowiedzieć się jak obsługiwać obiekt Any, aby zobaczyć rzeczywistą zawartość, ponieważ nie znałem typu Dowolnego obiektu, którego nie znałem, jakiego typu potrzebuję aby przesłać go, aby zobaczyć zawartość. Najlepszym rozwiązaniem dla mnie jest przesłać obiekt Any do NSObject i sprawdzić jego właściwość className na przykład: ((json ["glossary"] jako NSDictionary) ["title"] jako NSObject) .className pokazuje mi "__NSDictionaryM "i na przykład: – Pavel