Swift version: 5.6
By default Swift generates code that is only available to other Swift code, but if you need to interact with the Objective-C runtime – all of UIKit, for example – you need to tell Swift what to do.
That’s where the @objc
attribute comes in: when you apply it to a class or method it instructs Swift to make those things available to Objective-C as well as Swift code. So, any time you want to call a method from a UIBarButtonItem
or a Timer
, you’ll need to mark that method using @objc
so it’s exposed – both of those, and many others, are Objective-C code.
Don’t worry: if you forget to add @objc
when it’s needed, your code simply won’t compile – it’s not something you can forget by accident and introduce a bug.
To expose a method to Objective-C, just write @objc
before its name like this:
class MyController: UIViewController {
@objc func authenticateUser() {
}
}
That whole class is automatically Objective-C friendly because it inherits from UIViewController
, but if you need it you can also explicitly make a class open to Objective-C by marking it @objc
.
SPONSORED From March 20th to 26th, you can join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.