BLOGワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。Swift今回のエンジニアブログ担当の山下です。Objective-C」という気になる記事を見つけました。するとObjective-CでもSwiftのような安全なコーディングが出来るようになるのでは...!?と若干の期待をしつつ試してみました。nullableとnonnullObjective-Cの新しい言語仕様ではnullableとnonnullの2つの注釈が追加されています。それぞれnilやNULLが入る可能性のあるもの、入れることが認められないものを意味します。注釈は*記号の後に記述します。nullを許容しないプロパティの例を以下に示します。ちなみにプロパティにnonnullやnullableを指定する際は、属性に記述することもできます。)2つを付ける必要はありません。以下の2行は同じ意味となります。メソッドの戻り値や引数の型にもこのアンダーラインを付けない書き方が可能です。こちらを積極的に使った方が書きやすいと思います。先ほどのクラス定義のコードに戻ると、stringプロパティは__nonnullを追加することでnullを許容しないようになりました。ここで-setNilメソッドでnilを代入していますが、ビルド時には警告が出るようになります。以下のように間接的に代入すると警告は出ませんでした。この時点で早くもObjective-Cを安全に書くという夢は打ち砕かれました。Swiftとの連携ではこのnonnullやnullableを付けたObjective-Cのクラスを、Swiftから参照するとどうなるか見てみましょう。SwiftとObjective-Cの連携の方法は過去の記事を参照してください。SwiftとObjective-Cを共存させるまず以下のようなObjective-Cのクラスを用意します。NSStringオブジェクトを返すメソッドにそれぞれ注釈を追加しています。各変数はどんな型に推論されるのかを検証してみました。変数の型を調べることが出来ます。従来通りの書き方まず上のObjective-Cクラスを実装したとき、getStringメソッドの宣言に以下の警告がつきます。nullable)同じクラス内にnonnullかnullableが付けられたメソッドかプロパティが一つでも宣言されていれば、クラス内全ての宣言で明示するよう圧力がかかるようです。getStringメソッドの返却値を見てみましょう。従来通り、注釈を付けずに書いたものは、SwiftではString!型として扱われています。万が一getStringメソッドがnilを返してきた場合アプリがクラッシュする原因になります。nonnullを付けた場合getNonNullStringメソッドには、nonnull注釈を付けています。Swiftで返却値の型を調べると、OptionalでないString型として扱われています。このメソッドが確実にnilを返さないことはObjective-C側で保証する必要があります。仮にnilを返してもビルド時にエラーは出ませんが、実行時にはクラッシュします。nullableを付けた場合getNullableStringメソッドには、nullable注釈を付けています。Swiftでは返却値の型はString?型と推論されました。let等でのunwrapが必要になり、Swift側で安全にコードを書くことが出来ます。範囲によるnonnull指定ここまで試してみて、プロパティやメソッドに一通りnonnullかnullableを付けたくなると思います。コード全体を書き換える必要があるので、これにはより簡単な方法が用意されています。明示していないポインタをnonnullとして扱うことができます。あとはnullableにしたい部分だけnullableを明示するだけです。終わりにというわけで、あくまでもSwiftとのスムーズな連携が目的であり、Objective-Cでのnilの取り扱いはプログラマに任せられているというオチでした。SwiftとObjective-Cのコードを共存させる時にはnilが渡される可能性のある場所、そうでない場所を明記しておくメリットは大きいと思いました。15:15Nullableを使ったObjective-CとSwiftの連携Tweet関連記事2015-06-12WatchKitでWatchAppからiPhone側のアプリを操作する今回のエンジニアブログ担当の近藤です。このページを見ている...2015-04-24iOSでRealmを触ってみよう!今回のエンジニアブログを担当する村田です。今回はモバイル向...2015-03-03FirebaseでiOSアプリを作ってみよう!今回のエンジニアブログを担当する村田です。今回は、とあるイ...2014-10-07Swift版AFNetworkingのAlamofireを使ってみよう!今回のエンジニアブログを担当する村田です。Objective-Cの定...2014-07-22SwiftとObjective-Cを共存させる今回のエンジニアブログ担当の山下です。採用情報ワンダープラネットではモバイルゲーム開発者を募集しております。(S編)C/C++でネットワークプログラミングをやってみよう(2)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。