Swift調用Objective-C
Swift調用Objective-C需要一個名為“<工程名>-Bridging-Header.h”的橋接頭文件,如下圖所示。橋接頭文件的作用是為Swift調用Objective-C對象搭建一個橋,它的命名必須是“<工程名>- Bridging-Header.h”,我們需要在橋接頭文件中引入Objective-C頭文件,而且橋接頭文件是需要管理和維護的。

創建Swift工程
為了能夠更好地介紹混合搭配調用,我們首先創建一個Swift工程。出於簡單考慮,我們可以創建一個Mac OS X命令行工程,而不是一個iOS工程。
啟動Xcode 6,然後單擊File→New→Project菜單,在打開的Choose a template for your new project界麵中選擇“OS X→Application→Command Line Tool”工程模板


Product Name:工程名。
Organization Name:組織名。
Organization Identifier:組織標識(很重要)。一般情況下,這裏輸入的是組織名或公司的域名(如net.cocoagame),類似於Java中的包命名。
Bundle Identifier:捆綁標識符(很重要)。該標識符由Product Name + Organization Identifier構成。因為在App Store上發布應用的時候會用到它,所以它的命名不可重複。
Language:開發語言選擇。在這裏我們可以選擇開發應用所使用的語言,在Xcode 6中可以選擇Swift和Objective-C。
相關工程選項設置完成後,單擊“Next”按鈕,進入下一級界麵。根據提示選擇存放文件的位置,然後單擊“Create”按鈕,出現如下圖所示的界麵。


我們剛剛創建了Swift的工程,還需要調用其他Objective-C類來實現某些功能,需要添加Objective-C類到Swift工程中。具體過程是,右鍵選擇HelloWorld組,然後選擇菜單中的“New File…”彈出新建文件模板對話框,如下圖所示,選擇“OS X→Source→Cocoa Class”。



Objective-C的ObjCObject創建完成後,我們會在Xcode工程中看到新增加的兩個文件ObjCObject.h和ObjCObject.m。本書並不打算過多地介紹Objective-C語言,但為了更好地理解Swift與Objective-C的互相調用,我們還是簡單地解釋一下Objective-C代碼。
ObjCObject.h代碼如下:
#import <Foundation/Foundation.h> ①
@interface ObjCObject : NSObject ②
-(NSString*)sayHello:(NSString*)greeting withName: (NSString*)name; ③
@end
ObjCObject.h文件是Objective-C的頭文件,我們在這裏定義類,聲明類的成員變量和方法。第①行代碼引入Foundation框架的頭文件。第②行代碼定義類ObjCObject,它繼承自NSObject父類。NSObject類是所有Objective-C的根類。第③行代碼聲明了實例方法sayHello: withName:,它有兩個參數greeting和name。
ObjCObject.m代碼如下:
#import "ObjCObject.h" ①
@implementation ObjCObject
-(NSString*)sayHello:(NSString*)greeting withName: (NSString*)name ②
{
NSString *string = [NSStringstringWithFormat:@"Hi,%@ %@.",name,greeting];
return string;
}
@end
上述代碼第①行引入ObjCObject.h頭文件,第②行代碼定義sayHello: withName:方法。
下麵我們再來看看Swift調用文件main.swift的代碼:
import Foundation ①
varobj : ObjCObject = ObjCObject() ②
var hello = obj.sayHello("Good morning", withName:"Tony") ③
println(hello) ④
上述代碼第①行的import Foundation語句是引入Foundation框架,類似於Objective-C的#import <Foundation/Foundation.h>語句,關於Foundation框架我們會在下一章介紹。
第②行代碼聲明並實例化ObjCObject類的實例obj。ObjCObject就是Objective-C裏定義的ObjCObject。
第③行代碼調用ObjCObject類的sayHello: withName:方法。要注意Swift調用時的方法名和參數與Objective-C中該方法的方法名和參數的對應關係,如下圖所示。

第④行代碼打印輸出結果,輸出結果如下:
Hi,Tony Good morning.
要使Swift能夠調用Objective-C,還必須在橋接頭文件中引入Objective-C頭文件。HelloWorld- Bridging-Header.h代碼如下:
#import "ObjCObject.h"
很簡單,隻有一行代碼,如果還有其他的Objective-C頭文件,都需要在此引入。
這樣就實現了在Swift中調用Objective-C代碼,我們可以借助於這樣的調用充分地利用已有的Objective-C文件,減少重複編寫代碼,提供工作效率。
至此,整個工程創建完畢。如圖所示,點擊左上角的“運行”按鈕 即可查看運行結果。

更多內容請關注國內第一本Swift圖書《Swift開發指南》
本書交流討論網站:https://www.51work6.com/swift.php
歡迎加入Swift技術討論群:362298485
歡迎關注智捷iOS課堂微信公共平台

最後更新:2017-04-03 05:39:53