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

関連記事

I20151122-213340.jpg

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

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

記事を読む

20150327-131839.jpg

【Apple Watchアプリ】ボタン内の文字の先頭に画像を入れる方法【WatchKit】

Apple Watch向けのアプリを作るためのフレームワーク「WatchKit」。そのWatch

記事を読む

I20151102-201945.jpg

Swift 2の文法を学べるオススメ本「Swift 2標準ガイドブック」

Swift 2の文法について学べる書籍「Swift 2標準ガイドブック」が発売されたので、紹介し

記事を読む

I20160209-123839.jpg

【Swift】プロパティのsetとgetには異なるアクセス修飾子を指定できる

Swiftでは、プロパティのセッタ(set節)とゲッタ(get節)に異なるアクセス修飾子

記事を読む

I20160207-111059.jpg

【Swift】Xcodeで型推論された変数や定数の型を調べる方法

Swiftには、そのデータ型が明らかであれば型を明記する必要が無い「型推論」という機能があります

記事を読む

I20160102-131507.jpg

Swift 2の文法が分かるオススメ本「詳解 Swift 改訂版」

Swift文法書の定番とも言える、荻原 剛志さんの「詳解 Swift」。 Swiftの文法をキ

記事を読む

20160420-180135.jpg

【RxSwift】2つのUITextFieldに入力された数値の合計をUILabelに表示する

そろそろRxSwiftについて学び始めよう!ということで、まずは2つのUITex

記事を読む

I20150724-135442.jpg

iPhoneのホーム1画面目に置いているオススメなアプリ38本(2015年9月版)

2014年7月に「iPhoneアプリ開発にオススメの本10選(2014年7月版)」という記事

記事を読む

iPhoneゲームを簡単に開発したいならこの本がオススメ!「Sprite Kit iPhone 2Dゲームプログラミング」

iPhoneゲームアプリを簡単に開発したいなら「Sprite Kit iPhone 2Dゲームプ

記事を読む

I20151103-131550.jpg

iPhoneアプリ開発にオススメの本7選(初心者向け含む)2015年11月版

Xcode 7/Swift 2/iOS 9に対応した関連書籍が揃ってきたので、iPhoneア

記事を読む

【Mac】macOSのメール(Mail.app)でGmailをサクサク快適に使う方法

macOSに搭載されているメールアプリ、いわゆるMail.ap

【メンズネイル】新宿区大久保のネイルサロンで紫とピンクのネイルにしてもらった

2016年11月12日、東京都新宿区大久保にあるネイルサロン「

[Xcode][Swift]ボタンなどの同時タップを禁止する

iOSで、ボタンなどの同時タップを禁止する方法を紹介します。

【HomeKit】家の照明をSiriで制御できるようにしてみた

Apple製品と家電を連携するシステム「HomeKit(ホーム

【メンズネイル】新宿区大久保のサロンでターコイズとピンクのメタルネイルにしてもらった

2016年10月22日、いつもお世話になっているネイルサロン「

→もっと見る

PAGE TOP ↑