Watch 1 Star 1 Fork 0

rattan / OCBrigdeSwiftDemoObjective-C

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
oc和swift互相调用 spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

SwiftBridgeOC[OC与swift桥接互调]

一、OC调用swift文件

  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,如下图:   提示桥接      点确定创建桥接文件,Xcode会自动创建一个桥接文件,其名字为:工程名-Bridging-Header.h   生成的文件      这个桥接文件是 swift 调用OC文件的时候用的

1.配置

进入TARGETS ->Build Settings -> Packaging 中设置Defines Module为YES。 配置

设置Product Module Name (如:OCBrigdeSwiftDemo),也可以不设置,默认为工程的名字。这个在后面会用到。 此处输入图片的描述

2. 创建xxx.swift文件类:

import UIKit

class Tools: NSObject {
    var address:String
    var gender:String
    
    init(address:String,gender:String) {
        self.address = address
        self.gender = gender
    }
    
    func methodprintOC(){
        print("msg:\(self.address) + \(self.gender)")
    }
}

3.文件导入

在OC需要用到的swift文件中 导入文件 "Product Module Name -Swift.h" 因为 Product Module Name 默认是工程的名字。所以直接导入 #import "工程名-Swift.h",【该文件没有提示、是能手写补充】

#import "ViewController.h"
#import "OCBrigdeSwiftDemo-Swift.h"

###4.方法调用

记着写完先command+B编译一下,如果没有报错就可以在OC文件调用swift中的类了

#import "ViewController.h"

#import "OCBrigdeSwiftDemo-Swift.h"

@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    [self ocBridgeSwift];
}

#pragma mark - method
///oc初始化调用swift方法
-(void)ocBridgeSwift{
    Tools *tools = [[Tools alloc]initWithAddress:@"地址" gender:@"性别"];
    [tools methodprintOC];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}
@end

二、swift调用OC文件

  • 只要把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

示例: ####1、创建一个oc的文件(OTools)


+(void)logWithAddress:(NSString *)address gender:(NSString *)gender{
    NSLog(@"打印日志:\n 地址:%@ 性别:%@",address,gender);
}

-(void)logByAddress:(NSString *)address gender:(NSString *)gender{
    [OTools logWithAddress:address gender:gender];
}

####2、在 xxx-Header.h文件中添加头文件

#import "OTools.h"

####3、调用 command+s [混编时,每次代码更新都要保存,不然无法调用]保存文件

    override func viewDidLoad() {
        super.viewDidLoad()
        self.initBaseData();
    }
    
    func initBaseData(){
        OTools .log(withAddress: "北京市", gender: "男");
        let tools = OTools.init()
        tools.log(byAddress: "福建省", gender: "女");
    }

##三、注意和总结

注意: 1、OC项目在导入swift文件前 先按照系统提示创建桥接文件, 2、在 targets -> Build Settings -> Packaging 中设置Defines Module 为YES 3、OC中调用swift文件需要导入”工程名 -Swift.h" (这个是build Setting -> Packaging->Product Module Name 的名字,而这个属性默认是工程的名字) 4、每次写完记得command + B 编译 一下

5、swift项目 引用OC文件也需要创建 桥接文件,在这个桥接文件中导入OC文件的头文件 6、桥接文件只有一个,作用只是为了 swift 引用OC文件,OC引用swift 文件虽然也需要创建桥接文件,但是不需要在桥接文件中 导入swift文件 7、如果一个项目既有OC引用swift也有swift引用OC,就先设置OC调用swift文件,在桥接文件 导入OC文件,OC可以定义PCH文件导入”工程名 -Swift.h"

##四、自定义桥接文件

如果不用Xcode提示创建桥接文件也可以自定义一个桥接文件 1、使用 Header File 创建,把里面的内容清空。 2、这文件名可以自定义, 一般还是用工程名-Bridging-Header.h。 3、然后在 Build Setting -> Bridging Header 中 设置Objective-C Bridging Header 为自定义的桥接文件相对于工程的绝对路径,也就是项目总文件夹的路径,如果在第一层,就直接写自定义的桥接文件的名file.h,如果在下一层,文件夹/桥接文件 app/file.h 配置

4、最后进入TARGETS ->Build Settings -> Packaging 中设置Defines Module为YES

  • 记:oc与swift之间的属性传值、代理传值、代码块、方法调用、通知调用,请参考:OC与swift的数据传输

Comments ( 0 )

Sign in for post a comment

Objective-C
1
https://gitee.com/chenzm_186/OCBrigdeSwiftDemo.git
git@gitee.com:chenzm_186/OCBrigdeSwiftDemo.git
chenzm_186
OCBrigdeSwiftDemo
OCBrigdeSwiftDemo
master

Search

231008 48f1a665 1899542 231017 9a6720c6 1899542