2017-06-24 12 views
0
if (tweet?.media.count)! < 0 

さえずるタイプのクラスで、オプションのツイートこの行を感嘆符で囲む必要があるのはなぜですか?迅速な3

メディアタイプである[mediaitem]

カウントは、なぜ私は感嘆符が必要なのかのタイプのInt

のでしょうか?

+0

[オプションの連鎖](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html)式はオプションの値を返します。オプションの値を比較することはできません'' Int'にアンラップする必要があります。 – Keiwan

+3

* "どうして私は感嘆符が必要なのですか?" *したがって、あなたが 'tweet'が' nil'のときにあなたのアプリがクラッシュするのを楽しむことができます。 :) – rmaddy

+0

なぜそれは私にもうエラーを与えていないのですか? つぶやく場合は.media.count == 0 {return ""} else {return "Images"} –

答えて

1

tweetは任意ですので、値はnilです。オプションの連鎖(?.演算子をtweetmediaの間に使用すると)残りの式もnilである可能性があります。結局のところ、nilツイートの非nilメディアアイテムの配列を取得することはできません。

式の最後には、0に直接匹敵しないオプションのIntが残っています。そのため、!演算子を使用してカウントを強制的に展開しないようにコンパイラに指示します。

は、私は個人的には良い方法だと思う - の代わりに力アンラップの、あなたはtweetは、フロントアップnilであるかどうかを確認することができます。tweetnilではない場合

if let tweet = tweet, tweet.media.count < 0 { 
    // … 
} 

条件付きで、この唯一の収入のようなif letを使用します。その後、次の式で、残りの計算にアンラップされた非オプショナルのツイートを使用することができます。

+4

Xcodeが '!'演算子の推薦を止めたいと思っています。力アンラッピングに起因するクラッシュについてSOに掲載された迅速な質問は5,000件少なくなります。 – rmaddy

+0

これで何らかの理由でxcodeは私にそれ以上のことを強いられません。私は感嘆符を外してコンパイルすることができます。私はなぜ時々その '私は後で大丈夫何かをするように言っていない。 –

関連する問題