Swift version: 5.10
Swift has two anonymous types: Any
and AnyObject
. They are subtly different, and you will need to use both sooner or later.
AnyObject
refers to any instance of a class, and is equivalent to id
in Objective-C. It’s useful when you specifically want to work with a reference type, because it won’t allow any of Swift’s structs or enums to be used. AnyObject
is also used when you want to restrict a protocol so that it can be used only with classes.
Any
refers to any instance of a class, struct, or enum – literally anything at all. You’ll see this in Swift wherever types are unknown or are mixed in ways that can be meaningfully categorized:
let values: [Any] = [1, 2, "Fish"]
Ideally you should avoid both Any
and AnyObject
in your code – it’s better to be more specific if you can be.
SPONSORED Alex is the iOS & Mac developer’s ultimate AI assistant. It integrates with Xcode, offering a best-in-class Swift coding agent. Generate modern SwiftUI from images. Fast-apply suggestions from Claude 3.5 Sonnet, o3-mini, and DeepSeek R1. Autofix Swift 6 errors and warnings. And so much more. Start your 7-day free trial today!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – learn more in my book Swift Design Patterns
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.