美文网首页
OC和Swift混合开发

OC和Swift混合开发

作者: Frankkkkk | 来源:发表于2019-10-30 18:57 被阅读0次

一、需求背景

实际开发中要用到一个第三方库,第三方库是用Swift写的,而自己项目的代码是OC写的,所以需要OC和Swift混合编程。

二、OC调用Swift

1、当在OC项目中新建第一个Swift文件时,会提示是否要创建桥接文件,
一般选是,这样省去了自己创建桥接文件的步骤。

2.1、OC的代码中需要调用Swift的文件,需要导入隐式头文件:xxx-Swift.h,xxx-Swift.h在项目中是看不到的,但是确实是可以import的。

导入xxx-Swift.h

2.2、新建Swift类,RCTestController类

import UIKit

class RCTestController: UIViewController {
    override func viewDidLoad() {
        self.view.backgroundColor = UIColor.yellow
        NSLog("我是Swift")
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let vc = ViewController.init()
        vc.ocTest(withStr: "我是Swift")
        self.navigationController?.pushViewController(vc, animated: true)
    }
}

2.3、OC调用Swift类

RCTestController *vc = [[RCTestController alloc] init];
[self.navigationController pushViewController:vc animated:YES];

2.4、OC调用Swift类的方法,要在Swift类前面加@objcMembers修饰符,不然会有问题。

import UIKit

@objcMembers class RCTestController: UIViewController {
    override func viewDidLoad() {
        self.view.backgroundColor = UIColor.yellow
        NSLog("我是Swift")
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let vc = ViewController.init()
        vc.ocTest(withStr: "我是Swift")
        self.navigationController?.pushViewController(vc, animated: true)
    }
    
    func testSwiftFunc(str: String) {
        NSLog("OC传的字符串是::\(str)")
    }
}

OC中调用

RCTestController *vc = [[RCTestController alloc] init];
[vc testSwiftFuncWithStr:@"我是OC"];
[self.navigationController pushViewController:vc animated:YES];

三、Swift调用OC

1、在xxx-Bridging-Header.h的桥接文件中导入要开放的OC类

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "ViewController.h"

2、Swift直接调用*

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let vc = ViewController.init()
    vc.ocTest(withStr: "我是Swift")
    self.navigationController?.pushViewController(vc, animated: true)
}

参考文章:https://www.jianshu.com/p/3e32bacb8da2

相关文章

网友评论

      本文标题:OC和Swift混合开发

      本文链接:https://www.haomeiwen.com/subject/pthavctx.html