Objective-C調用Swift

來源:互聯網
上載者:User

標籤:ios   遊戲   swift   手機遊戲   

如果已經有了一個老的iOS應用,它是使用Objective-C編寫的,而它的一些新功能需要採用Swift來編寫,這時就可以從Objective-C調用Swift。

Objective-C調用Swift時不需要橋接標頭檔,而是需要Xcode產生的標頭檔。這種檔案由Xcode產生,不需要我們維護,對於開發人員也是不可見的。如所示,它能夠將Swift中的類暴露給Objective-C,它的命名是:<工程名>-swift.h。我們需要將該標頭檔引入到Objective-C檔案中,而且Swift中的類需要聲明為@objc。

建立Objective-C工程

為了能夠更好地介紹混合搭配調用,我們首先建立一個Objective-C工程。出於簡單考慮,我們可以建立一個Mac OS X命令列工程。

啟動Xcode 6,然後單擊File→New→Project菜單,在開啟的Choose atemplate for your new project介面中選擇“OS X→Application→Command Line Tool”工程模板(如所示)。


接著單擊“Next”按鈕,隨即出現如所示的介面。


在Product Name中輸入“HelloWorld”,在Language中選擇Objective-C,其他的項目可以結合自己的實際情況輸入內容。相關的工程選項設定完成後,單擊“Next”按鈕,後面的步類似。

建立成功後的介面如所示,在左邊的導覽列中產生了一個main.m檔案。開啟main.m檔案,可以在右邊的代碼介面中看到它的代碼,我們還可以在這裡編寫代碼。


在Objective-C工程中添加Swift類

我們剛剛建立了Objective-C的工程,需要添加Swift類到工程中。具體過程是,右鍵選擇HelloWorld組,選擇菜單中的“New File…”彈出建立檔案模板對話方塊。如所示,選擇OS X→Source→Cocoa Class。


接著單擊“Next”按鈕,隨即出現下所示的介面。在Class中輸入“SwiftObject”,在Language中選擇Swift,其他的選項保持預設值就可以了。


相關選項設定完成後,單擊“Next”按鈕,進入儲存檔案介面,根據提示選擇存放檔案的位置,然後單擊“Create”按鈕建立Swift類。如果工程中沒有橋接標頭檔,在建立過程中,Xcode也會提示我們是否添加橋接標頭檔,可以選擇不添加。

調用代碼

Swift的SwiftObject建立完成後,我們會在Xcode工程中看到新增加的SwiftObject.swift檔案。

SwiftObject.swift代碼如下:

 

import Foundation                                                               ① @objc class SwiftObject: NSObject {                     ② Func sayHello(greeting : String, withName name : String) ->String {      ③ var string = "Hi," + namestring += greeting return string;    }}

上述代碼第①行引入了Foundation架構的標頭檔。第②行代碼定義SwiftObject類,SwiftObject類繼承自NSObject類。另外,我們在類前面聲明為@objc,@objc所聲明的類能夠被Objective-C訪問,@objc還可以修飾屬性。

第③行代碼定義了sayHello方法,它有兩個參數,第一個參數不需要指定外部參數名,第二個參數(除了第一個以後所有的參數)需要指定外部參數名,例如withName是name參數的外部參數名。這是為了方便在Objective-C中調用。

下面看Objective-C端的代碼,main.m檔案代碼如下:

#import <Foundation/Foundation.h>#import "HelloWorld-swift.h"                            ① int main(intargc, const char * argv[]) { SwiftObject *sobj = [[SwiftObjectalloc] init];          ②NSString *hello = [sobjsayHello:@"Good morning"withName:@"Tony"];        ③ NSLog(@"%@",hello);                                                         ④ return 0;}

 上述代碼第①行引入標頭檔HelloWorld-swift.h,它是Objective-C調用Swift對象所必需的,它的命名規則是“<工程名>-swift.h”。

第②行代碼執行個體化SwiftObject對象,SwiftObject是Swift中定義的類。第③行代碼調用SwiftObject的sayHello方法,它在Objective-C中被調用時的方法和參數命名與SwiftObject的方法和參數之間的對應關係如所示。

 


第④行代碼NSLog(@"%@",hello)用於輸出結果,輸出結果如下:

2014-07-05 14:25:43.879HelloWorld[3266:303] Hi,TonyGood morning

這樣就實現了在Objective-C中調用Swift代碼,我們可以藉助於這樣的調用充分利用已有的Swift檔案,減少重複編寫代碼,提高工作效率。


更多內容請關注國內第一本Swift圖書《Swift開發指南》本書交流討論網站:http://www.51work6.com/swift.php歡迎加入Swift技術討論群:362298485

歡迎關注智捷iOS課堂公用平台



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.