LoginSignup
6
6

More than 5 years have passed since last update.

Objective-CからSwiftに移行した際のポイント

Posted at

概要

今回自分のアプリの機能拡張をSwiftで行った時に、生じたポイントについてまとめます。

SwiftとObjective-Cの共存の際のポイント

SwiftでObjective-Cのクラスを参照する

Objective-C bridge headerを使用する。
プロジェクトにSwiftのコードを追加すると、<プロジェクト名>-Bridge-Header.hが追加されるので、参照したクラスのヘッダーをimportする。

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "Location.h"

Objective-CからSwiftのクラスを参照する。

<プロジェクト名>-Swift.hをインポートする
Xcode上のインスペクタには表示されてませんが、Swiftを参照するためのヘッダーが自動的に用意されるので、インポートすればOK。
下記のサンプルは私のプロジェクトの一部です。

#import "MapViewController.h"
#import "AtMiyakojima-Swift.h" //Swiftのクラス呼び出し用

enum

Cのenumではなく、Objecttive-CでNS_ENUMを使う。
Swiftで定義したenumはObjective-Cでは使えないっぽい。参考

正直、これについてはenumを使う意味をあまり見いだせなかった。
互いの publicな定数を引用すればよいかと思ったり。
知識として、記述。

文法の違い

isKindOfClass

Objective-Cのクラスチェックは

if([object isKindOfClass:[MyClass class]])
{
  //ToDo...
}

と記述するが、Swiftでの推奨例は

if object is MyClass
{
  //ToDo...
}

となる。

その他

Xcodeでリファクタリングができない

Xcode7.3.1でもObjective-Cしか対応してなかった。
残念

まとめ

まだピュアSwiftでアプリを作ったことがないので、色々とハマりどころはありそうですが、まだ完全にSwiftへの移行ができるわけでもないので(Unityプロジェクトなど)当面は共存の道を探っていくのがよさそうです。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6