Swiftを意識したObjective-Cのヘッダーファイルの作り方

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

Swiftが登場してから2年以上経過しており、Swiftが使われるパターンもかなり増えている。一方で、プログラミングの仕方によっては、依然としてSwiftが合わないような場合、例えば、ライブラリー開発や、C++を混在させたコードなどがあるが、この場合は、Objective-Cも併用、あるいはObjective-Cを使うということもあるだろう。さて、ここでは、Swiftと連携させるときに問題を防げるようなObjective-Cのヘッダーファイルの作成方法を書いてみたい。

まず、これを行う前に、Objective-CとSwiftでは以下の違いがあるということを念頭に入れる必要がある。

Objective-CではC言語からの影響で、すべてのオブジェクト型はポインターで、それがnilになる可能性がある。一方、Swiftはnilを許容しない型と許容する型があり、その区別を行う必要がある。

上記から、Swiftでも整合性を取れるようにするためには、Objective-C側でSwiftではOptional型として扱われるのかどうかを明示しなければならなくなった。

したがって、Objective-Cでプロパティーや返り値、引数のあるメソッドを定義するときには、オブジェクトに以下のいずれかをセットする必要がある。

  • nonnull / _Nonnull – 絶対にnilにならない型
  • nullable / _Nullable – Optional型(nilになる可能性がある型)

なお、上記のものは、Objective-Cでも正しく設定されていれば、Optionalかどうかがチェックされるようになるので、安全性という面でも上がるという側面もあるので、是非とも使いたいところである。

例としては以下の通りである。

#import <Foundation/Foundation.h>

@interface SomeClass : NSObject

@property (nullable, nonatomic, copy) NSString *text;
- (nonnull NSString *)someMethod: (nonnull NSString *)text;

@end

このように意識しておくことで、Swiftとの親和性が上がり、使いやすくなるので、是非とも覚えておきたい。

タイトルとURLをコピーしました