【Swift】Objective-Cで書いたクラスをメソッド単位で少しずつSwiftへ移行する方法

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20150714-010114.jpg

Objective-Cで作った既存のアプリをSwiftで書き直したいと思っているのですが、一気に書き換えていくのは大変そうですし、気が重くなりますし、新たなバグも埋め込んでしまいそうです。

そこで、Swiftのエクステンション(extension)を使って、メソッド単位で少しずつ移行していく方法を考えてみました。

    

スポンサード リンク

移行前のObjective-Cコード

Objective-Cで書かれた以下の様なクラスがあったとします。

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

- (int)methodA;
- (int)methodB;
- (int)methodC;

@end

    

ViewController.m

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"%d", [self methodC]);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (int)methodA
{
    NSLog(@"ObjC methodA");
    return 111;
}

- (int)methodB
{
    NSLog(@"ObjC methodB");
    return [self methodA];
}

- (int)methodC
{
    NSLog(@"ObjC methodC");
    return  [self methodB];
}

@end

viewDidLoad → メソッドC → メソッドB → メソッドAという順番で処理を呼んでいます。

    

メソッドを1つだけSwiftに移行する

上記の状態から、メソッドを1つだけSwiftに移行してみます。

ViewController.swift

import Foundation

extension ViewController {
    func methodB() -> Int32 {
        println("Swift methodB")
        return self.methodA()
    }
}

    

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

- (int)methodA;
//- (int)methodB;
- (int)methodC;

@end

    

ViewController.m

#import "ViewController.h"

#import "TransitionSample-Swift.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"%d", [self methodC]);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (int)methodA
{
    NSLog(@"ObjC methodA");
    return 111;
}

//- (int)methodB
//{
//    NSLog(@"ObjC methodB");
//    return [self methodA];
//}

- (int)methodC
{
    NSLog(@"ObjC methodC");
    return  [self methodB];
}

@end

あとはすべてのメソッドが移行できるまで繰り返し、最後にObjective-C側のクラスを廃止して、Swift側のextensionをclassに書き換えればスムーズに移行できそうな気がします。

    

@akio0911はこう思った。

まだ実際のアプリのコードで検証したわけではないので、もしより良い方法があればぜひお知らせ下さい :)

    

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

I20150805-182005.jpg

Swiftにおける関数型のエッセンスを学ぶために「関数プログラミング実践入門」を読み始めた

Swiftの関数型言語的な特徴についての話を各所で見るようになりましたが、自分は関数型言語の

記事を読む

20160730-172416.jpg

Auto Layoutで非表示にした部分を詰める(トルツメ)する方法

Auto Layoutを使って非表示にしたコントロールの部分を詰める(トルツメ)方法を説明します

記事を読む

20141031-150402.jpg

アップルのベータテストサービス「TestFlight」が正式公開

アップルが先週の木曜、ベータテストサービス「TestFlight」を正式に公開しました。 Te

記事を読む

I20160505-011515.jpg

iOS 9以降で使えるReadable Content Guideを試してみた

iOS 9から追加されたReadable Content Guide(readableConte

記事を読む

I20160124-111228.jpg

初心者がデザインを勉強するなら、まずこの本を読むといいかも

まず僕のスペックから話をすると、 アプリのコードを書いたり、ブログを書いたりしている

記事を読む

I20150722-185359.jpg

【書籍】12のパターンで学ぶ本「iOSアプリ開発 AutoLayout徹底攻略」

     Auto Layoutの使い方について解説されている本「iOSアプリ開発 A

記事を読む

I20150802-085831.jpg

Swift 1.2でtouchesBeganメソッドのNSSetがSetへ変更されました

Swift 1.2で、touchesBegan・touchesMoved・touchesCanc

記事を読む

I20160119-155700.jpg

Xcodeで80文字目のところにガイドラインを表示する方法

Xcodeで80文字目のところに線(ガイドライン)を表示する方法について解説します! 「ソース

記事を読む

I20160212-000722.jpg

Swiftにおけるセレクタ(Selector)について調べてみた

NSTimerなどを使う際、引数に「Selector」という型があるのですが、これがSwiftで

記事を読む

I20151031-175009.jpg

初心者にオススメの本!Swiftではじめる iPhoneアプリ開発の教科書【Swift 2&Xcode 7対応】

     Xcode 7とSwift 2に対応したアプリ開発の入門書籍「Swiftでは

記事を読む

I20170521-225453.jpg
東京駅八重洲口の「羊肉酒場 悟大」で網焼きジンギスカンを頂きました!

ゆうせいさんと株式会社 大庄さんからご招待頂き、悟大withサッポ

I20170514-165235.jpg
iPhoneと連携できる体重体組成計「Withings Body Cardio」を使ってます

ジムに通い始めて体脂肪率が落ち始めたのをキッカケに、iPhoneと

I20170507-155440.jpg
【派手髪】ハーレイクイン風の髪色に染めてもらいました

2016年10月20日、ハーレイクイン風の髪色に染めてもらいました

I20170504-173110.jpg
【メンズネイル】東京・新宿のネイルサロンでターコイズのホログラムネイルしてもらった

ネイルネタが1年分くらい溜まっているので、ちょっとずつ書いていこう

I20170502-010117.jpg
SNUGGのライトニングケーブルが耐久性高し。8ヶ月使ってますが断線の気配なし!

iPhoneの充電&転送ケーブルであるLightningケーブルっ

→もっと見る

PAGE TOP ↑