該是好好學習Swift 2.0的時候囉~上週Apple才宣布Swift開源化!趁著棘手的專案告一段落,我要利用時間學習iOS新的開發語言,讓公司的戰力可以延續下去。
首先我們會遇到,以Swift為主的專案想使用Objective C的類別,因為我們可能沒啥時間去重刻,於是想要Objective C直接轉生為Swift來使用。
在此我們建立一個Swift專案名為HappyTest8,接著新增Cocoa Touch Class語言為Objective C,並名為HTMainViewController。
接著Xcode就會跳出提示⋯⋯(此步驟稍後再設定亦可)
表示要幫你自動建立Bridging Header,可以看到生成HappyTest8-Briding-Header.h,此為固定格式,我在裡頭加了:
#import “HTMainViewController.h"
表示要讓Swift使用該Objective C的類別,使用時不必再寫import這個類別,打該類別名稱時,Xcode會跳出自動完成(Auto Complete)清單給你選,公司新人小米的經驗是,目前Xcode有時候不會跳出自動完成,還以為自己寫錯。
在專案設定中的Building Settings發現,Xcode已幫我們設定好Complier路徑。
- Objective C兩個檔案HTMainViewController.h與HTMainViewController.m分別寫:
/** Theme: Swift Using Objective C IDE: Xcode 7 Language: Swift and Objective C Date: 104/12/09 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ // HTMainViewController.h #import <UIKit/UIKit.h> @interface HTMainViewController : UIViewController @property (nonatomic) NSInteger happyNumber; -(void)showHappyWorld; @end // -------------- // HTMainViewController.m #import "HTMainViewController.h" @interface HTMainViewController () @end @implementation HTMainViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } -(void)showHappyWorld { NSLog(@"Happy World ^_^ with HappyNumber: %ld", self.happyNumber); } @end
- 在Swift的ViewController.swift寫:
// ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let mainVC = HTMainViewController() mainVC.showHappyWorld() mainVC.happyNumber = 7 mainVC.showHappyWorld() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
可以見到寫Swift每行程式碼最後不用加分號,呼叫方法預設定變數簡潔有力,果然是設計來打擊Objective C!該時候準備見風轉舵囉:P~
編譯執行得到結果:
2015-12-10 01:34:10.079 HappyTest8[11157:843124] Happy World ^_^ with HappyNumber: 0
2015-12-10 01:34:10.079 HappyTest8[11157:843124] Happy World ^_^ with HappyNumber: 7
也就是我們順利Swift使用Objective C自製的method與property。於是同一專案可以並存兩者語言囉~
接著若我們想要橋接(Bridge)第三方套件,可以怎麼做呢?
參考:
Comments on: "[iOS][Swift] 在Swift專案使用Objective C類別" (1)
[…] 已經知道在Swift專案使用Objective C類別後,現在我們來實現在Swift專案使用Objective C第三方套件。現階段(Swift才一歲半)還是少不了會使用到Objective C第三方套件,所以我們有必要來做橋接(Bridge)使用它! […]
讚讚