Ответ 1
Обычно это то, что для дженериков. Существует редкость для того, чтобы иметь 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:
if let string = x as? String {
println("I'm a string: \(string)")
}
Для более подробного обсуждения см. "Тип каста для любого и любого объекта" на языке программирования Swift.
Но опять же, если вы не работаете с кодом ObjC, редко можно использовать Any
или AnyObject
. Дженерики и перегрузки - это инструменты, предназначенные для решения этих проблем в Swift.