Swift is a new programming language for writing iOS and OS X applications released by Apple at WWDC in 2014. It can be mixed with Objective-C/C/C++ programming.


One. Objective-c calls C

Objective-c is a superset of C, so Objective-C is fully compatible with C, and you can write C code directly in Objective-C code without changing it.

Objective-c calls C++

Xcode requires the.mm extension of the source file to enable the objective-C ++ extension of the compiler. You can write BOTH C++ and Objective-C code in the.mm file, which supports most C++ features. Almost fully compatible with GNU C/C++.

Swift calls Objective-C

1. Add the bridge file

Add a new Header file to the project as a bridge file. The recommended name is {project_name} -bridge-header. h, where I named swiftmixeddemo-bridge-header. h, as shown in the picture:

2. Set objective-C Bridging Header

Select the project name, go to the Build Settings TAB, select All, and type bridging in the search box in the upper right to find the Objective-C Bridging Header, And set to {project_name} / {project_name} – Bridging – Header. H, here I set as SwiftMixedDemo/SwiftMixedDemo – Bridging – Header. H, as shown in figure:

3. Add the Objective-C file

Add the Objective-C files you need to import to your project, and then add the corresponding Header files to the bridge file swiftMixedDemo-bridge-header.h:

You can then call the code in the Objective-C file as normal.

4. Swift call C/C + +

And Swift cannot call C/C++ directly, but can call C/C++ indirectly by calling Objective-C code.

Objective-c calls Swift

Well, just reference the following header file where it needs to be called:

#import "{project_name}-Swift.h"
Copy the code

Note, however, that Swift 4’s @objc inference is turned off by default. If you want to expose it to OC, you need to manually add the @objc identifier before the class or property or method name.


PS: {project_name} indicates the project name.

The above.


Please correct any intellectual property rights, copyright issues or theoretical errors. https://juejin.cn/post/6844903529589522445 reprint please indicate the original author and the above information.