Karakuri.com

Fintechではたらくアプリケーションエンジニアの技術録

SwiftのisEmptyやCountはnilを返す可能性があることを忘れてしまう

C#でstring.Emptyを多様しているせいか、SwiftのisEmptyがnilとなることを想定せずにクラッシュさせてしまったことが昔ありました。そのときPlaygroundで挙動を確認したことがあったので、その結果を載せておきます。

nilの可能性を忘れてしまう変数

isEmpty

f:id:hazakurakeita:20180413222215p:plain
case5において、初期化していない非オプショナル型の配列は、オプショナル型か非オプショナル型かを明示するとisEmptyを呼び出すことができます。ビルドエラーにはなりません。このcase5をオプショナル型としてisEmptyを実行するとnilが返ってきます。更に、このcase5を非オプショナル型にアンラップすると何も返ってきません。例外が発生します。また、case6のように初期化していないオプショナル型の配列も、明示することでisEmptyを呼び出し可能です。こちらの場合はcase6をオプショナル型、非オプショナル型どちらでisEmptyを実行しても例外が発生します。

Count

CountもC#ではnullのイメージがないため、Swiftでは一瞬戸惑ってしまいます。