Swift調用Objective-C

Swift調用Objective-C須要一個名爲「<工程名>-Bridging-Header.h」的橋接頭文件,以下圖所示。橋接頭文件的做用是爲Swift調用Objective-C對象搭建一個橋,它的命名必須是「<工程名>- Bridging-Header.h」,咱們須要在橋接頭文件中引入Objective-C頭文件,並且橋接頭文件是須要管理和維護的。
php

 

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

 

接着單擊「Next」按鈕,隨即出現以下圖所示的界面。
微信

 

咱們能夠按照提示並結合本身的實際狀況和須要輸入相關內容。下面簡要說明一下圖18-3中的工程選項。
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」按鈕,出現以下圖所示的界面。
框架

 

在左邊的導航欄中打開main.swift文件,會看到以下圖所示的代碼界面,咱們能夠在這裏編寫Swift代碼。
網站

 

在Swift工程中添加Objective-C類
咱們剛剛建立了Swift的工程,還須要調用其餘Objective-C類來實現某些功能,須要添加Objective-C類到Swift工程中。具體過程是,右鍵選擇HelloWorld組,而後選擇菜單中的「New File…」彈出新建文件模板對話框,以下圖所示,選擇「OS X→Source→Cocoa Class」。
spa

 

接着單擊「Next」按鈕,隨即出現以下圖所示的界面。在Class中輸入「ObjCObject」,在Language中選擇Objective-C,其餘的選項保持默認值就能夠了。
.net

 

相關選項設置完成後,單擊「Next」按鈕,進入保存文件界面,根據提示選擇存放文件的位置,而後單擊「Create」按鈕建立Objective-C類。若是是第一次建立Objective-C類,那麼保存完成的時候,Xcode會提示咱們是否添加橋接頭文件,以下圖所示,彈出一個對話框,咱們應該選擇「Yes」,以後會在工程中建立橋接頭文件HelloWorld-Bridging-Header.h。
命令行

 

調用代碼
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文件,減小重複編寫代碼,提供工做效率。
至此,整個工程建立完畢。如圖所示,點擊左上角的「運行」按鈕 便可查看運行結果。
 
code




更多內容請關注國內第一本Swift圖書《Swift開發指南》orm

本書交流討論網站:http://www.51work6.com/swift.php

歡迎加入Swift技術討論羣:362298485

歡迎關注智捷iOS課堂微信公共平臺

相關文章
相關標籤/搜索