OC和Swift混編的一個簡單例子

Swift和Objective-C的兼容相互兼容性使得在一個工程里可以方便地使用兩種語言,就這個使用場景,本文將介紹

  • 如何將 Swift 導入到 Objective-C
  • 如何將 Objective-C 導入到Swift
  • 一個簡單的例子
導入到Swift 導入到Objective-C
Swift 不需要import 語句 #import "ProductModuleName-Swift.h"
Objective-C 不需要import 語句端三,需要Objective-C bridging 頭文件 #import "header.h"

一個簡單的例子

我們模擬一個項目,以前的控制器和工具類代碼都是用OC編寫蜕便,現(xiàn)在我們要用Swift編寫新的代碼溃斋,一般的,以前OC代碼會調用新編寫的Swift代碼分尸,Swift代碼也需要調用OC的工具類锦聊。

1. 設置Target>setting

將框架 target 的 Build Settings > Packaging > Defines Module 設置為 Yes


setting.png

2.新建Swift文件

在OC項目中第一次新建Swift文件時,系統(tǒng)會自動提示創(chuàng)建 Bridging 頭文件箩绍,如文章開頭表格所示孔庭,該文件用于將OC導入到Swift。


creatASwiftFile.png

3.將OC導入到Swift

我們用Swift寫了一個View材蛛,這個view被點擊時會掉用OC的工具類OCTools的方法
1圆到、在SwiftAndOC-Bridging-Header.h文件里#import "OCTools.h"
2、在Swfit文件里調用OCTools的方法

import UIKit

class SwiftView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        initSubViews()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func initSubViews(){
        self.backgroundColor = UIColor.lightGrayColor()
        
        let dotView = UIView(frame: self.bounds)
        dotView.center = self.center
        dotView.layer.masksToBounds = true
        dotView.layer.cornerRadius = self.bounds.size.height/2
        dotView.layer.borderWidth = 1
        dotView.layer.borderColor = UIColor.blackColor().CGColor
        
        self.addSubview(dotView)
        
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapDotAction))
        dotView.addGestureRecognizer(tap)
    }
    
    @objc private func tapDotAction(){
        OCTools.logWithText("Don't touch me!")
    }
}

3.將Swift導入到OC

我們用Swift編寫的view需要在OC寫的控制器里被調用
1卑吭、在控制器里#import "SwiftAndOC-swift.h"芽淡,注意這里的頭文件時系統(tǒng)自動生成,格式是 "Your Product Name"-swift.h
2豆赏、調用Swift的類

#import "ViewController.h"
#import "SwiftAndOC-swift.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    SwiftView *sView = [[SwiftView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

    sView.center = self.view.center;
    
    [self.view addSubview:sView];
    
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

For more information please visitUsing Swift with Cocoa and Objective-C:Swift and Objective-C in the Same Project

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挣菲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掷邦,更是在濱河造成了極大的恐慌白胀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙饰,死亡現(xiàn)場離奇詭異纹笼,居然都是意外死亡,警方通過查閱死者的電腦和手機苟跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門廷痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人件已,你說我怎么就攤上這事笋额。” “怎么了篷扩?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵兄猩,是天一觀的道長。 經(jīng)常有香客問我鉴未,道長枢冤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任铜秆,我火速辦了婚禮淹真,結果婚禮上,老公的妹妹穿的比我還像新娘连茧。我一直安慰自己核蘸,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布啸驯。 她就那樣靜靜地躺著客扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罚斗。 梳的紋絲不亂的頭發(fā)上徙鱼,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音针姿,去河邊找鬼袱吆。 笑死,一個胖子當著我的面吹牛搓幌,可吹牛的內容都是我干的杆故。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉愁,長吁一口氣:“原來是場噩夢啊……” “哼处铛!你這毒婦竟也來了?” 一聲冷哼從身側響起拐揭,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撤蟆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堂污,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體家肯,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年盟猖,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨衣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换棚。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖反镇,靈堂內的尸體忽然破棺而出固蚤,到底是詐尸還是另有隱情,我是刑警寧澤歹茶,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布夕玩,位于F島的核電站,受9級特大地震影響惊豺,放射性物質發(fā)生泄漏燎孟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一尸昧、第九天 我趴在偏房一處隱蔽的房頂上張望揩页。 院中可真熱鬧,春花似錦彻磁、人聲如沸碍沐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累提。三九已至,卻和暖如春磁浇,著一層夾襖步出監(jiān)牢的瞬間斋陪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工置吓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留无虚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓衍锚,卻偏偏與公主長得像友题,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子戴质,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫度宦、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 概述 利用runtime特性實現(xiàn)iOS項目的組件化開發(fā)告匠,是由@casatwy大神提出來的戈抄,在他的博客中具體介紹...
    Mr杰杰閱讀 1,605評論 2 9
  • 昨晚舞蹈班結課放寒假啦,小隱老師特別用心地給我們拍了視頻后专,說要剪輯好划鸽,送給我們做新年禮物。說實話,和這樣一群愛生活...
    極簡夏小囧閱讀 177評論 1 3
  • 1 一位讀者給我留言裸诽,身邊有許多年紀輕輕卻想著輟學的少年嫂用,不知如何是好。 讀者說崭捍,阿夜尸折,你寫一篇關于勸學的文章吧啰脚!...
    十三夜閱讀 5,841評論 32 213