Swift version: 5.6
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 Still waiting on your CI build? Speed it up ~3x with Blaze - change one line, pay less, keep your existing GitHub workflows. First 25 HWS readers to use code HACKING at checkout get 50% off the first year. Try it now for free!
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.