Appleがこれまで基盤として採用していたObjective-C。

しかしコードの複雑さやバグの発生の多さなどさまざまな問題が指摘されていました。

そこでAppleが独自で開発した次世代のプログラミング言語が「Swift」です

今回はそんなObjective-CとSwiftの違いについて徹底解析していきます。

  • Objective-CとSwiftってどう違うの?
  • Swiftに移行はするべきなの?
  • Swiftに移行する手順がわからない

以上に該当する方はぜひ一読ください。


Objective-Cとは?

Objective-Cとは、C言語をベースにしたSmalltalkのオブジェクト指向をモデルに作られた言語のことです。

C言語と聞くと、「C̟++」を思い浮かべる方も多いはず。

C++が新たな言語として拡張させるものであるのに対し、Objective-Cは既存の言語に新たな言語を付加するという方法で拡張させていきます。

1983年に開発された言語ですが、広く活用されるようになったのは2000年代以降。

Apple社がMac OS Xの専用公式言語として採用したことから、一般的に活用されるようになりました。


Swiftとは?

Objective-Cに代わる新たな言語として誕生したのがSwift。

Apple社が独自で開発を重ね、2014年から利用可能となったApple社製品専用のプログラミング言語です。

これまでApple製品といえばObjective-Cが一般でしたが、言語開発以降は積極的にSwiftが採用されるようになっています。

比較的高度なC言語がベースとなっているObjective-Cに比べ、簡易な構文で記述できるのがSwiftの魅力。

アプリ開発初心者でも、比較的容易に扱える言語です。


それぞれの言語のメリット

Objective-CがMac愛用者の中で一般化となった後、より扱いやすい言語としてAppleが自社開発したSwift。

双方はベースとなる言語も違うため、それぞれ異なるメリットがあります。


Objective-C

Objective-Cは今やひと昔前の言語として扱われることも多いですが、実態はいまだに必要とされるケースがほとんど。

では、Objective-Cにしかないいくつかの長所を挙げていきましょう。

  • 広い実績と幅広い実例が存在する
  • Windowsでも使用可能
  • 本格的なプログラムの開発ができる

1983年から開発され、Apple製品を中心に長年一般的に広く利用されてきたObjective-C。

長年携わったエンジニアはかなり多いため、実績や実例がかなりあります

そのため、問題が起きたときの解決策をすぐに発見でき対応力もかなりあります。

またOS Xを中心に使用されてきたと上記で記述しましたが、Windowsでも使用可能というメリットも。

日本ではWindowsでのアプリケーションやプログラムの開発も多いため、柔軟に対応できます。

Objective-Cは記述法が独特で、熟練のエンジニアの高度なテクニックを要する場合も。

だからこそより本格的なプログラムの開発を実現でき、長年働くエンジニアの間ではかなり親しまれているようです。


Swift

2014 年よりApple製品専用の言語として開発されたSwift。

  • Objective-Cより簡易な構文で記述可能
  • 基礎知識の少ない初心者も比較的扱いやすい
  • 処理速度が速い

Swiftの長所として以上のことが挙げられます。

最大のメリットといえば、Objective-Cよりかなり簡易な構文で言語の記述ができる点。

基礎のある熟練エンジニアであれば、Objective-Cの構文も読み取れるでしょう。

しかしアプリ開発初心者にとって独特な記述法を持つObjective-Cは、知識を習得するだけでもかなりの時間とコストがかかってしまいます

一方Swiftはシンプルな構文がメインなので、Objective-Cと比較するとかなりコストや時間を削減できます。

また近年新しく開発された言語であり、処理速度が速いこともメリットの1つです。


それぞれの言語のデメリット

では次にObjective-CとSwiftそれぞれのデメリットについて比較していきましょう。


Object-C

Objective-Cの大きなデメリットは以下の2点です。

  • 言語の記述法が独特
  • バグが起こりやすい

Objective-Cの問題点として1番に挙げられるのは、言語の記述法です。

もともとObjective-CはC言語がベースとなっているため、比較的高度な言語。

さらにObjective-Cはかなり独特で、初心者には難易度が高い言語としても知られています。

C言語とオブジェクト指向の言語を組み合わせているObjective-C。

高度な開発が進むにつれいびつな記述になっていく点がかなり問題視されています。

また複雑になっていくことで、バグがどうしても起こりやすくなったという欠点もあります。


Swift

一方新開発されたSwiftの方にもいくつかの欠点があります。

  • Apple製品のみでしか扱えない
  • まだ全てに対応しているわけではない

SwiftはApple社がObjective-Cに代わる言語として自社開発した言語

そのため、Apple製品との相性が抜群な反面、他の環境で使う場合は使い勝手が悪いです。

また、Swiftは2014年から使用されるようになった言語です。

iPhone向けのアプリケーション開発などにはぴったりですが、まだ対応していないプログラムもあります


速度やメソッドの使い方・書き方を徹底比較!

より快適にプログラムを作成するために、新しく開発されたSwift。

では実際にObject-Cと比較すると速度やメソッドの使い方・書き方はどれくらい改善されたのでしょうか。

今回は徹底比較していきたいと思います。


2つの言語の速度比較

Swiftは高速にパフォーマンスを行うことができる点が魅力の1つ。

既存のObject-Cよりも高速であるということが利点として挙げれています。

  • Objective-Cよりも最大2.6倍高速
  • Python 2.7よりも最大8.4倍高速

出典元:https://www.apple.com/jp/swift/

Appleの公式サイトでは、Object-Cと比較すると最大2.6倍高速であることが発表されていました。

高速な処理が行えるため、重くなりがちな画像や動画などの取り扱いもスムーズに進みます。

大量なデータを使用するiOSアプリの開発では、Swiftの高速処理でとても効率よく作業を行えますよ。


メソッドの使い方・書き方は?

これまでObjective-Cは「[]」でメソッドのコードを記述する記述法が採用されていました。

プログラミング初心者にとっては、かなり奇妙な見た目に見えていたでしょう。

そこでSwiftではより一般的に使用されている「.」を使った記述法に変更。

さらに長く複雑だったObjective-Cのコードですが、Swiftはよりわかりやすいコードで記述できるようになりました。

開発を行っていく過程もより効率よく進められるでしょう。


いずれはSwiftへ移行すべき?

Objective-Cの代用品として新しく開発されたSwift。

実際にSwiftへ移行はすべきなのでしょうか。


完全移行するには不安要素が多い

これまで、AppleユーザーはObjective-Cの使用が一般的でした。

世界的に見てもObjective-Cで構成されたアプリであふれています。

そのため、Swiftに移行しなければならないと悩んでいる方も多いでしょう。

しかしObjective-CからSwiftに移行する際にはいくつかの注意点があります。

  • 一部はObjective-CからSwiftへ呼び出せない
  • 複数人で開発をしていた場合多額のコストがかかる
  • マクロの定義づけがない

まずはObjective-CからSwiftへ移行となると、手間とコストがかなりかかります。

特に複数人で開発に携わっている場合、伝えるためのコストがかかったり、認識に差異が生じてトラブルがおきたりなどさまざまな不安要素が。

また一部機能はObjective-Cから移行できないものもあるため、注意が必要です。

ではこれらの不安要素を抱えながらも、Swiftへの移行は重要なのでしょうか。


Appleも推奨しているのはSwift!

Objective-Cより効率的かつ利便性を考え、長年の月日を費やしApple社によって開発されたSwift。

Apple社は、高速処理簡単なコード記述法などの魅力から移行を推奨しています。

現にSwiftへ移行する既存のアプリケーションは多く、少しずつ一般的になりつつあります。

スマートフォンを対象としたアプリの開発にもピッタリですよ。

今後Appleでは少しずつSwiftへの移行が全面的に進んでいくでしょう。

まだ歴史的に浅く、実績もないので不安要素は多いですが少しずつSwiftへシフトしていきましょう。


Object-CからSwiftに移行する手順

ではSwiftへと移行する手順について解説していきます。


ファイルの移行

まずはObjective-CからSwiftへ1ファイルずつ移行していきます。

ファイルごとに行うことで、慎重かつスムーズに作業することができます。

SwiftとObjective-Cはプロジェクト内で共存することができ、同じファイル名を保存することが可能。

まずは移行したいファイル名と同じファイルをSwiftに作成しましょう。


SwiftからObjective-Cを呼び出す

ファイルを作成したら、SwiftからObject-Cを呼び出して移行していきます。

この作業はいくつかの工程が必要なので、詳しくこの後説明していきます。

  • ファイルを移行させる→呼び出す

この工程を何度か繰り返すことで移行作業は完了します。


Swift・Object-C間を呼び出し合う方法も知っておこう

Objective-CからSwiftへデータを移行するには、それぞれから呼び出すことが必要不可欠。

何度か繰り返すことでスムーズに行うことができるのでチェックしてみてください。


Objective-CからSwiftのプログラムを使用できるようにする

  1. #import “[Product Name]-Swift.h”

上記のようにプロダクト名を設定すれば、簡単に双方からプログラムを使用することができるようになります。


Objective-CからSwiftを呼び出す

Swiftのコードを呼びたい場合は、下記のようなファイルをまずインポートしましょう。

  1. {アプリ名}-Swift.h

インポートの方法は以下になります。

  • #import “ViewController.h”
  • #import “ObcCallSwift-Swift.h”
  • @interface ViewController ()
  • @end
  • @implementation ViewController
  • – (void)viewDidLoad {
  •     [super viewDidLoad];
  •     // Do any additional setup after loading the view.
  •     TestObject *testObject = [[TestObject alloc] init];
  •     [testObject hoge];
  •     NSString *str = [testObject hogeString];
  •     NSLog(@”str:%@”,str);
  • }
  • @end

これだけで簡単にObjective-CからSwiftのメソッドを呼び出すことができます。


SwiftからObjective-Cを呼び出す

SwiftからObjective-Cを呼び出すこともできます。

まずは呼び出したいObjective-CファイルをSwiftへインポートしましょう。

  1. {ProjectName}-Bridging-Header.h

上記のようなファイルの中からインポートを行うことで、簡単に呼び出すことができます。


Object-CからSwiftへの書き換え方法もご紹介!

Objective-CからSwiftへ移行する際、コードの書き換えも重要になります。


Setter内部

Setter内部で処理していた箇所を移行する場合以下のようにSwiftは記述していきます。

  1. var currentPage: Int {
  2.     didSet {
  3.         // … 〇〇
  4.     }
  5. }

「didset」を活用すれば、Objective-Cのコードをひとまとめに代用することができます。


getter指定されている場合

  1. @property(nonatomic, getter=isTapped) BOOL tapped;

getter指定された上記のようなプロパティは、Swiftに書き換える際getter名で記述することができません。

そこでこのようにSwiftでは書き換えていきましょう。

  1. var tapped: Bool //
  2. var isTapped: Bool { //
  3.     return tapped
  4. }
  5. self.tapped = true
  6. if (self.isTapped) {
  7.     // ….
  8. }


まとめ

今回はObjective-CとSwiftの違いについて徹底比較してまいりましたがいかがでしたか?

Appleの採用した言語として最も活用されていたObjective-C。

しかしさまざまな高度な開発が進むにつれ、Objective-Cだけでは支えきれなくなってきました。

そこでApple社独自が開発したのがSwift。

処理の速さは群を抜いて高く、開発者たちがのぞんでいた機能もさまざま搭載されています。

まだ歴史も浅く、完全にSwiftへ移行するには不安要素が多いです。

少しずつObjective-Cから移行をして、Swiftと共存させてみてはいかがでしょうか

ぜひ、これからの開発の参考にしてみてください。