Swift和OC互調(diào)

一、OC調(diào)用swift文件

在OC項(xiàng)目中創(chuàng)建一個(gè)swift文件的時(shí)候,Xcode 會(huì)提示 需要?jiǎng)?chuàng)建一個(gè)橋接文件,如下圖:

提示橋接
提示橋接

點(diǎn)確定創(chuàng)建橋接文件,Xcode會(huì)自動(dòng)創(chuàng)建一個(gè)橋接文件,其名字為:工程名-Bridging-Header.h

生成的文件
生成的文件

這個(gè)橋接文件是 swift 調(diào)用OC文件的時(shí)候用的

1.配置

進(jìn)入TARGETS ->Build Settings -> Packaging 中設(shè)置Defines Module為YES。
配置
配置

設(shè)置Product Module Name (如:OCBrigdeSwiftDemo),也可以不設(shè)置,默認(rèn)為工程的名字。這個(gè)在后面會(huì)用到。
此處輸入圖片的描述
此處輸入圖片的描述

2. 創(chuàng)建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.文件導(dǎo)入

在OC需要用到的swift文件中 導(dǎo)入文件 "Product Module Name -Swift.h" 因?yàn)?Product Module Name 默認(rèn)是工程的名字。所以直接導(dǎo)入 #import "工程名-Swift.h",【該文件沒(méi)有提示、是能手寫補(bǔ)充】


#import "ViewController.h"

#import "OCBrigdeSwiftDemo-Swift.h"

4.方法調(diào)用

記著寫完先command+B編譯一下,如果沒(méi)有報(bào)錯(cuò)就可以在OC文件調(diào)用swift中的類了


#import "ViewController.h"

#import "OCBrigdeSwiftDemo-Swift.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    [self ocBridgeSwift];

}

#pragma mark - method

///oc初始化調(diào)用swift方法

-(void)ocBridgeSwift{

    Tools *tools = [[Tools alloc]initWithAddress:@"地址" gender:@"性別"];

    [tools methodprintOC];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

@end

二、swift調(diào)用OC文件

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

示例:

1、創(chuàng)建一個(gè)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、調(diào)用

command+s [混編時(shí),每次代碼更新都要保存,不然無(wú)法調(diào)用]保存文件


    override func viewDidLoad() {

        super.viewDidLoad()

        self.initBaseData();

    }


    func initBaseData(){

        OTools .log(withAddress: "北京市", gender: "男");

        let tools = OTools.init()

        tools.log(byAddress: "福建省", gender: "女");

    }


三、注意和總結(jié)

注意:

1、OC項(xiàng)目在導(dǎo)入swift文件前 先按照系統(tǒng)提示創(chuàng)建橋接文件,

2、在 targets -> Build Settings -> Packaging 中設(shè)置Defines Module 為YES

3、OC中調(diào)用swift文件需要導(dǎo)入”工程名 -Swift.h"

(這個(gè)是build Setting -> Packaging->Product Module Name 的名字,而這個(gè)屬性默認(rèn)是工程的名字)

4、每次寫完記得command + B 編譯 一下

5、swift項(xiàng)目 引用OC文件也需要?jiǎng)?chuàng)建 橋接文件,在這個(gè)橋接文件中導(dǎo)入OC文件的頭文件

6、橋接文件只有一個(gè),作用只是為了 swift 引用OC文件,OC引用swift 文件雖然也需要?jiǎng)?chuàng)建橋接文件,但是不需要在橋接文件中 導(dǎo)入swift文件

7、如果一個(gè)項(xiàng)目既有OC引用swift也有swift引用OC,就先設(shè)置OC調(diào)用swift文件,在橋接文件 導(dǎo)入OC文件,OC可以定義PCH文件導(dǎo)入”工程名 -Swift.h"

四、自定義橋接文件

如果不用Xcode提示創(chuàng)建橋接文件也可以自定義一個(gè)橋接文件

1、使用 Header File 創(chuàng)建,把里面的內(nèi)容清空。

2、這文件名可以自定義, 一般還是用工程名-Bridging-Header.h。

3、然后在 Build Setting -> Bridging Header 中 設(shè)置Objective-C Bridging Header 為自定義的橋接文件相對(duì)于工程的絕對(duì)路徑,也就是項(xiàng)目總文件夾的路徑,如果在第一層,就直接寫自定義的橋接文件的名file.h,如果在下一層,文件夾/橋接文件 app/file.h
配置
配置

4、最后進(jìn)入TARGETS ->Build Settings -> Packaging 中設(shè)置Defines Module為YES

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,205評(píng)論 3 119
  • 前言 點(diǎn)擊簡(jiǎn)書(shū)寫文章的時(shí)候發(fā)現(xiàn)還有幾篇文章只寫了標(biāo)題,內(nèi)容還沒(méi)有寫。所以現(xiàn)在趁著午休時(shí)間,把這篇文章完善一下??吹?..
    CoderXLL閱讀 32,880評(píng)論 12 31
  • 前言: Swift語(yǔ)言出來(lái)后,可能新的項(xiàng)目直接使用Swift來(lái)開(kāi)發(fā),但可能在過(guò)程中會(huì)遇到一些情況,某些已用OC寫好...
    瘋狂的電腦閱讀 2,451評(píng)論 0 9
  • 這些天不能上網(wǎng),有好多時(shí)候就在想:如果沒(méi)有網(wǎng)絡(luò)會(huì)如何?不能下象棋了,不能聽(tīng)音樂(lè)了,不能看最新的電影,不能聊天了,不...
    OO碰到OO閱讀 328評(píng)論 0 0
  • 空投項(xiàng)目二:LTH 全球首個(gè)區(qū)塊鏈行業(yè)社交平臺(tái)Ltalk開(kāi)放注冊(cè)啦!注冊(cè)即送500LTH!僅限前10萬(wàn)名用戶,快加...
    區(qū)塊鏈薅羊毛閱讀 642評(píng)論 0 0

友情鏈接更多精彩內(nèi)容