Я передал параметр функции типа AnyObject, потому что все может быть передано ему. Есть ли способ получить динамический тип передаваемого объекта?Получить тип AnyObject динамически в Swift
ответ
Как правило, это то, что генерики для. Существует редко веская причина иметь AnyObject
в коде, который не взаимодействует с ObjC. Если вы выполняете различные действия на основе типа, вы, вероятно, на самом деле должны использовать перегрузку.
При этом имеется несколько способов получить доступ к типу. Как правило, вы хотите запустить другой код в зависимости от типа, так что вы можете использовать switch
для этого:
let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}
или
let x:AnyObject = "asdf"
switch x {
case let xString as String: println("I'm a string: \(xString)")
default: println("I'm not a string")
}
Или вы можете использовать, если:
if let string = x as? String {
println("I'm a string: \(string)")
}
Подробнее см. «Литье типа для любого и AnyObject» на языке программирования Swift.
Но опять же, если вы не работаете с кодом ObjC, редко можно использовать Any
или AnyObject
. Дженерики и перегрузки - это инструменты, предназначенные для решения этих проблем в Swift.
Первый импорт Фонд
и если вы wan't тип test1 сделать:
var test1 = "test"
println(_stdlib_getTypeName(test1))
вы получите "ЧТС" ЧТС означают строки.
если бы вы попробовать с Int он будет TtSi (я для междунар)
Имейте в виду, что эти имена типов являются частными и могут быть изменены в любое время. Ведущим подчеркиванием имени функции является индикатор от Apple, что это внутренняя функция, которая не предназначена для вызова извне stdlib. –
Использование неразрешенного идентификатора '_stdlib_getTypeName' – Sander
Непонятно, что вы подразумеваете под «типом» в своем вопросе. Для любого значения любого типа в Swift, вы можете получить его динамический тип во время выполнения, как это:
theVariable.dynamicType
Что вы можете сделать с этим еще один вопрос.
версияSwift 3 с намеком @jojodmo «s:
type(of: theVariable)
Это должно быть андерсером для этого вопроса. –
В Swift 3, он был изменен на '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")
}
}
Пожалуйста, добавьте некоторое объяснение. –
- 1. Получить тип AnyObject в Swift
- 2. swift: какой тип "(AnyObject)"?
- 3. Swift 2.2 AnyObject Тип
- 4. AnyObject недвижимость в Swift
- 5. Swift Array - использование "Содержит" тип AnyObject
- 6. Swift: как назначить значение, тип которого - «AnyObject!»?
- 7. Тип 'Int32' не соответствует протоколу 'AnyObject' Swift?
- 8. Фильтрация AnyObject [] в Swift
- 9. Фильтр-массив [AnyObject] в Swift
- 10. Как получить номер из anyObject в swift
- 11. Динамически проверять тип объекта в Swift 2
- 12. Преобразование [NSObject, AnyObject] в [String, AnyObject] в Swift
- 13. Swift напечатанных от AnyObject
- 14. Swift, Self from AnyObject
- 15. Странное поведение AnyObject Swift
- 16. Swift 1,2 литых [AnyObject?] К [AnyObject]
- 17. Swift Как найти объект в массиве AnyObject
- 18. Получить значение из AnyObject Response Swift
- 19. Тип «OSType» не соответствует протоколу «AnyObject» в Swift 2.0
- 20. Swift: Как придать тип AnyObject NSArray в этой ситуации?
- 21. Swift Затвор по AnyObject
- 22. Swift - Правильное использование AnyObject
- 23. Swift AnyObject Conversion
- 24. Нужно уточнить AnyObject в Swift
- 25. фильтр AnyObject в Swift 2
- 26. Возвращение Swift словарь в AnyObject
- 27. Проверка значения anyobject в Swift
- 28. Swift: Литье [UInt32] в AnyObject
- 29. Невозможно преобразовать тип [NSObject: AnyObject] в строку
- 30. Swift 2: Невозможно преобразовать значение типа '[NSObject: AnyObject]' в ожидаемый тип аргумента '[String: AnyObject]'
Я хотел бы сказать, что ни один из ответов на эту тему не было мне помочь. Моя проблема заключалась в том, что я не мог получить информацию о типе во время отладки, узнать, как обрабатывать объект Any, чтобы увидеть фактический контент, потому что я не знал тип любого объекта, который я не знал, к какому типу, который мне нужен чтобы отобразить его. И лучшим решением для меня является листинг объекта Any для NSObject и, например, его свойство className: ((json ["glossary"] as NSDictionary) ["title"] as NSObject) .className это показывает мне "__NSDictionaryM », и, например, на: – Pavel