該是好好學習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)使用它! […]
讚讚