zoukankan      html  css  js  c++  java
  • Swift、OC、C++混合编程

    OC调用C++:

         1、创建oc工程:

      

         

       2.主要步骤:将某个.m文件后缀改为.mm,

        

      3.创建c++文件

     

    #ifndef __Test__CPPHello__
    #define __Test__CPPHello__
    
    #include <stdio.h>
    
    class CPPHello {
    public:
       static void hello();
    };
    
    #endif /* defined(__Test__CPPHello__) */
    CPPHello.h
    1 void CPPHello::hello()
    2 {
    3     printf("Hello C++ 
    ");
    4 }
    CPPHello.cpp

      4.调用的时候只需要#import文件就行了

     

    C++调用OC:

      1、在上面的代码基础上创建OC文件

          2、将.h文件的内容去掉,写成c++方法,(不能包含oc代码)如:

    1 void objcHello();
    ObjcHello.h

      3、将.m文件改成.mm文件

          4、在.mm文件中实现方法,在方法中调用oc代码(记得导入相应的oc头文件:如NSLog -> #import <Foundation/Foundation.h>

    1 #import "ObjcHello.h"
    2 #import <Foundation/Foundation.h>
    3 
    4 void objcHello()
    5 {
    6     NSLog(@"Hello objc 
    ");
    7 }
    ObjcHello.mm

        或者这样:

     1 #import "ObjcHello.h"
     2 #import <Foundation/Foundation.h>
     3 
     4 //OC对象
     5 @interface ObjcHello : NSObject
     6 
     7 -(void)TestLog;
     8 
     9 @end
    10 
    11 @implementation ObjcHello
    12 
    13 -(void)TestLog
    14 {
    15     NSLog(@"Hello objc 
    ");
    16 }
    17 
    18 @end
    19 
    20 void objcHello()
    21 {
    22     ObjcHello *obj = [[ObjcHello alloc] init];
    23     [obj TestLog];
    24 }
    ObjcHello.mm


    Swift调用C语言代码

       1.创建swift项目

      

       2.创建c文件出现如下界面,选择yes 自动生成了桥接头文件:<工程名>-Bridging-Header.h  

     

             桥接头文件的作用是为Swift调用C或者OC对象搭建一个桥,它的命名是“<工程名>- Bridging-Header.h”,使用时在桥接头文件中引入C或者OC的头文件.

      

      

    1 #ifndef __TestSwift__CHello__
    2 #define __TestSwift__CHello__
    3 
    4 #include <stdio.h>
    5 
    6 void hello();
    7 
    8 #endif /* defined(__TestSwift__CHello__) */
    CHello.h
    1 #include "CHello.h"
    2 
    3 void hello()
    4 {
    5     printf("hello C
    ");
    6 }
    CHello.C
    #import "CHello.h"
    TestSwift-Bridging-Header.H
    import Foundation
    
    hello();
    main.swift

       

    Swift调用OC,OC调用C++:

       1.Swift调用oc 与 Swift调用c操作一样,需要通过桥接头文件#import .h来调用

       2.使用时如下:

    1 #import <Foundation/Foundation.h>
    2 
    3 @interface OcObj : NSObject
    4 
    5 -(void)testLog;
    6 
    7 @end
    OcObj.h
     1 #import "OcObj.h"
     2 
     3 @implementation OcObj
     4 
     5 -(void)testLog
     6 {
     7     NSLog(@"hello OC
    ");
     8 }
     9 
    10 @end
    OcObj.m
    1 import Foundation
    2 
    3 var obj = OcObj();
    4 obj.testLog();
    main.swift

      3.swift不能直接调用c++代码,只能通过调用oc,oc调用c++  oc调用c++只要把oc的点.m文件后最改成.mm,步骤参考上面的oc调用c++

    如果你要手动添加桥接文件,请参考下面图

     

    OC调用Swift代码

    当你xcode6.0以上创建一个工程时,如项目名称为Test 则项目中有个隐藏文件为:Test-Swift.h,可以在调用的文件通过 

    #import "Test-Swift.h" ,然后可以像调用oc那样调用swift中的类或者其他的

       如果要手动修改的话可参照下图(不建议修改):

  • 相关阅读:
    进程的实践与练习2
    士兵队列训练问题
    大数相加
    Ignatius and the Princess II
    Parentheses Balance (括号平衡)---栈
    简单计算器
    C++全排列函数next_permutation()和prev_permutation()
    黑白图像
    9*9乘法表
    输入5 个数按从小到大的顺序输出
  • 原文地址:https://www.cnblogs.com/imhere/p/4323322.html
Copyright © 2011-2022 走看看