1. ホーム
  2. swift

[解決済み] Optional Boolの値をチェックする

2022-12-18 08:07:30

質問

Optional Boolがtrueかどうかを調べたいとき、この方法ではうまくいきません。

var boolean : Bool? = false
if boolean{
}

このようなエラーになります。

オプションの型 '@IvalueBool?' はブール値として使用できません; '!= nil' をテストしてください。 代わりに

nilをチェックしたいのではなく、返された値がtrueかどうかをチェックしたいのです。

常に if boolean == true をしなければならないのでしょうか?

オプショナルは BooleanType に準拠しなくなったので、コンパイラは私がBoolの値をチェックしたいことを知るべきではありませんか?

どのように解決するのですか?

オプションのブーリアンでは、チェックを明示的にする必要があります。

if boolean == true {
    ...
}

そうでなければ、オプショナルをアンラップすることができます。

if boolean! {
    ...
}

しかし、これは boolean が nil - にして、それを防ぐことができます。

if boolean != nil && boolean! {
    ...
}

ベータ5以前は可能でしたが、リリースノートで報告されているように変更されました。

オプショナルな Bool 値を扱う際の混乱を避けるため、オプショナルが値を持つときは暗黙的に true、持たないときは false と評価されなくなりました。その代わりに、オプショナルが値を含んでいるかどうかを見つけるために、== または != 演算子で nil に対する明示的なチェックを行います。

追記: @MartinR によって提案されたように、3 番目のオプションに対するよりコンパクトなバリエーションは、合体演算子を使用することです。

if boolean ?? false {
    // this code runs only if boolean == true
}

つまり、boolean が nil でない場合、式は boolean 値として評価され(つまり、ラップされていない boolean 値を使用)、それ以外の場合、式は false