Swift in Objective-C: Import Guide for Hybrid Projects

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

How to Import Swift Code into Objective-C: Step-by-Step Guide with Real Examples



Have you ever found yourself in a situation where you need to add a fresh Swift module to a good old Objective-C project? Or maybe your team is gradually migrating from Objective-C to Swift, but for now you have to work in hybrid mode? If so — you've come to the right place. The question “How can I import Swift code to Objective-C?” is one of the most popular on Stack Overflow (tens of thousands of views), and it's no surprise: even experienced developers sometimes get confused when setting up the bridge between the two languages.



In this article, we'll break down how to properly import Swift code into Objective-C, what pitfalls await you, and how not to turn your project into a puzzle. Let's go!



Why Swift and Objective-C Still Live Together?



Many people think that with the arrival of Swift, everyone abandoned Objective-C and switched to the new language. Reality is more complex. Thousands of large projects (including banking, social network, and enterprise system apps) are written in Objective-C, and rewriting them entirely is a task for years. That's why Apple provided an interoperability mechanism: you can write new features in Swift while leaving old code in Objective-C.



The key problem: Swift and Objective-C are different worlds. Swift compiles into its own binary format, Objective-C into its own. For them to “see” each other, you need a special bridge — a bridging header for importing Objective-C into Swift, and an automatically generated header file for importing Swift into Objective-C.



How It Works: How Swift Sees Objective-C and Vice Versa



Let's clarify the direction right away:



  • Objective-C → Swift: use the generated file ProductModuleName-Swift.h (where ProductModuleName is the name of your module).
  • Swift → Objective-C: use the bridging header (ProjectName-Bridging-Header.h).


Today we are interested in the first option. But for a complete picture, it's useful to know both.



Step 1: Configure the Project for Collaboration



Before importing Swift code into Objective-C, make sure your project is properly configured. If you are creating a project from scratch and immediately planning a hybrid architecture — it's simple. If the project already existed in Objective-C — you need to add Swift support.



Check Build Settings



Open your target settings in Xcode and find the parameter “Defines Module”. It should be set to Yes. If it's not there — add it manually:



// Build Settings → Packaging → Defines Module = YES


Then find “Product Module Name” — this is the name that will be used in the generated header file. By default, it matches the project name, but you can change it (e.g., MyApp).



Create a Bridging Header (if it doesn't exist)



When you first add a Swift file to an Objective-C project, Xcode will offer to create a bridging header. Agree. If you missed this moment — create the file manually: New File → Header File and name it YourProjectName-Bridging-Header.h. Then specify the path to it in the settings:



// Build Settings → Swift Compiler - General → Objective-C Bridging Header// Example: $(SRCROOT)/$(PROJECT_NAME)/YourProjectName-Bridging-Header.h


Step 2: Write a Swift Class That Will Be Accessible from Objective-C



Not every Swift class is automatically “visible” to Objective-C. There are several mandatory requirements: