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との親和性が上がり、使いやすくなるので、是非とも覚えておきたい。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。