且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在我的 Swift 项目中使用 Objective-C 项目

更新时间:2023-09-25 10:30:40

I'll start writing from the very beginning. Suppose you have a project in Objective-C and now you want to continue your project's development in Swift. Follow the below guidelines: (This intends to your specific needs)

First choose to add a new file from File->New->File. In this process select your language as Swift. In the final step here, you will be prompted to Create Bridging Header. Select that:

Now build your project once (+B). You may get an error like this:

Change your target's minimum deployment to the version that Swift supports. (Example in the below screenshot)

To use Objective-C resources in Swift files:

Now that you've got one ProjectName-Bridging-Header.h file in your project. If you want to use any Objective-C class in your Swift files, you just include the header file of that class in this bridging header file. Like in this project, you have ESP_NetUtil and ESPViewController class and their header files too. You want to expose them to Swift and use them later in Swift code. So import them in this bridging header file:

Build once again. Now you can go to your Swift file. And use the Objective-C classes as like you use any resource in swift. See:

N.B: You must expose all the class headers (that you're intending to use later in Swift) in that bridging header file

To use Swift resources in Objective-C files:

Now you may wonder, I've successfully used Objective-C resources in Swift. What about the opposite? Yes! You can do the opposite too. Find your Target->Build Settings->Swift Compiler - General->Objective-C Generated Interface Header Name. This is the header file you will be using inside your Objective-C classes for any Swift to Objective-C interoperability. To know more check here.

Now inside any of your Objective-C class, import that interface header and use Swift resources in Objective-C code:

You will get more understanding from the official apple documentation.

You can checkout the worked out version of your linked project here with Objective-C-Swift interoperability.