Just a Computer Graphics Studio & My Life

該是好好學習Swift 2.0的時候囉~上週Apple才宣布Swift開源化!趁著棘手的專案告一段落,我要利用時間學習iOS新的開發語言,讓公司的戰力可以延續下去。

首先我們會遇到,以Swift為主的專案想使用Objective C的類別,因為我們可能沒啥時間去重刻,於是想要Objective C直接轉生為Swift來使用。

Swift using Objective C class

在此我們建立一個Swift專案名為HappyTest8,接著新增Cocoa Touch Class語言為Objective C,並名為HTMainViewController。

接著Xcode就會跳出提示⋯⋯(此步驟稍後再設定亦可)

Swift using Objective C class3

表示要幫你自動建立Bridging Header,可以看到生成HappyTest8-Briding-Header.h,此為固定格式,我在裡頭加了:

#import “HTMainViewController.h"

表示要讓Swift使用該Objective C的類別,使用時不必再寫import這個類別,打該類別名稱時,Xcode會跳出自動完成(Auto Complete)清單給你選,公司新人小米的經驗是,目前Xcode有時候不會跳出自動完成,還以為自己寫錯。

Swift using Objective C class2

在專案設定中的Building Settings發現,Xcode已幫我們設定好Complier路徑。

  • Objective C兩個檔案HTMainViewController.hHTMainViewController.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自製的methodproperty。於是同一專案可以並存兩者語言囉~

接著若我們想要橋接(Bridge)第三方套件,可以怎麼做呢?

參考:

廣告

Comments on: "[iOS][Swift] 在Swift專案使用Objective C類別" (1)

  1. […] 已經知道在Swift專案使用Objective C類別後,現在我們來實現在Swift專案使用Objective C第三方套件。現階段(Swift才一歲半)還是少不了會使用到Objective C第三方套件,所以我們有必要來做橋接(Bridge)使用它! […]

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: