【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コード)

関連記事

20141227-125250.jpg

実践的な内容まで載っている!開発のプロが教える Swift標準ガイドブック

株式会社マイナビ様より「開発のプロが教える Swift標準ガイドブック」の見本紙を頂きました。早

記事を読む

I20160925-163452.jpg

タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の色を変更する方法を紹介します!

記事を読む

20140724-103334.jpg

iPhoneアプリ開発にオススメの本10選(2014年7月版)

@akio0911です。2013年12月に「レベル・目的別!iPhoneアプリ開発おすすめ本

記事を読む

Auto LayoutやStoryboardの仕組みをしっかり理解できる!「UIKit徹底解説」

インプレスジャパン様より献本御礼。UIKit周りを中心に、「Auto Layout」「Story

記事を読む

20140905-180905.jpg

英語苦手な人がSwiftを学びたいならこの本を読むといいよ!

アップルのWWDC2014で発表された、iOSおよびOS Xのためのプログラミング言語「Swift」

記事を読む

I20150907-185322.jpg

uGUIの使い方が分かる本「uGUIではじめるUnity UIデザインの教科書」

株式会社マイナビ様より献本御礼。 本書は、公式のUIフレームワーク「Unity UI(uGUI

記事を読む

I20151122-213340.jpg

【入門本】詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift 2 + Xcode 7対応

ソーテック社より「詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift

記事を読む

20141210-164612.jpg

【Swift】Generated Header内にSwiftクラスの定義が記述されない場合の確認事項【Xcode6】

Swiftで書いたクラスをObjective-Cで使う際には、「Generated Header

記事を読む

I20160130-110811.jpg

【解決】Redundant conformance of ‘NSDate’ to protocol ‘Comparable’エラーが出た時の対処方法

アプリ開発中に「Redundant conformance of 'NSDate' to pro

記事を読む

20150406-121104.jpg

【アプリ開発】選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

記事を読む

20170423-182541
良肌研究室のフェイスウォッシュとオールインワンジェルを使ってみた

株式会社ブラシナさんから、良肌研究室の商品をご提供頂いたので、

I20170228-002742.jpg
約3ヶ月で体脂肪率を6.2%も落とせたキッカケについて

(右上の赤枠内がダイエット開始前、左下の赤枠内が3ヶ月後の数値

I20161224-174949.jpg
「季節の野菜を直接配送!季節のスムージー」を買ってみた

「FiNCモール」で、「季節の野菜を直接配送!季節のスムージー」を

I20161002-152537.jpg
【メンズネイル】東京・新宿のネイルサロンでマットネイルしてもらった

2016年7月18日、東京・新宿のメンズOKなネイルサロン「Tot

I20160925-163452.jpg
タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の

→もっと見る

PAGE TOP ↑