Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources
Interoperability with Objective-C

Interoperability with Objective-C

Introduction

Interoperability between Swift and Objective-C allows developers to leverage existing Objective-C codebases while taking advantage of Swift's modern features. This tutorial covers how to use Objective-C code in Swift and vice versa, making it easy to integrate both languages in your projects.

Setting Up Your Project

To start using Objective-C in your Swift project, you will need to create a new project or add Objective-C files to an existing Swift project. Here’s how to set it up:

1. Create a new Swift project in Xcode.

2. Add a new Objective-C file by selecting File -> New -> File and choosing Objective-C File.

3. When prompted, choose to create a bridging header. This header allows Swift to access Objective-C code.

Creating a Bridging Header

A bridging header is a special file that lets Swift code access Objective-C classes. It must be named with the format ProjectName-Bridging-Header.h. Here’s how to create and configure it:

1. In your newly created Objective-C file, Xcode will prompt to create a bridging header. Accept this option.

2. Add the required import statements for the Objective-C classes you wish to use in Swift:

#import "YourObjectiveCClass.h"

In the bridging header, you can import any Objective-C headers that you want to expose to Swift.

Using Objective-C Code in Swift

Once your bridging header is set up, you can use Objective-C classes directly in Swift. Let’s see a simple example:

Suppose you have an Objective-C class Calculator defined as follows:

// Calculator.h
@interface Calculator : NSObject
- (int)add:(int)a to:(int)b;
@end
// Calculator.m
#import "Calculator.h"
@implementation Calculator
- (int)add:(int)a to:(int)b {
  return a + b;
}
@end

Now, you can call this Objective-C method from Swift as follows:

let calculator = Calculator()
let result = calculator.add(3, to: 5)
print(result) // Output: 8

Using Swift Code in Objective-C

To use Swift classes in Objective-C, you need to import the generated Swift header in your Objective-C files. The generated header is named ProjectName-Swift.h. Here’s how you do it:

1. In your Objective-C file, import the Swift header:

#import "YourProjectName-Swift.h"

2. Now you can use Swift classes and their methods. For example:

// SwiftClass.swift
class SwiftClass: NSObject {
  @objc func greet() {
    print("Hello from Swift!")
  }
}
// ObjectiveCFile.m
SwiftClass *swiftObject = [[SwiftClass alloc] init];
[swiftObject greet]; // Output: Hello from Swift!

Conclusion

Interoperability between Swift and Objective-C opens up a world of possibilities for developers. By leveraging existing codebases and utilizing both languages' strengths, you can create powerful applications. Follow the steps outlined in this tutorial to successfully integrate Objective-C into your Swift projects and vice versa.