2016-08-18 5 views
-2

をチェックnilをだから私はスウィフトの構文を次のよう、それは私にナットを駆動しているため1つのライナーを把握するために失敗します。スウィフトoptionals

if lastProfile == nil || lastProfile.id == profile.id { 
     useProfile(profile) 
     lastProfile = profile 
} 

は今、私はそれをチェーン可能性が表示されますが、私はまだ2 - で終わるだろう3 ifs。私はそれを梱包することができましたが、私は再び2-3のifsで終わる...これは1つの急いでこれを行うことは可能ですか?

編集:(私たちは醜い同意が)

私の同僚が代わりを見つけた:

if !(latestProfile != nil && latestProfile!.voiceId != profile.voiceId) { 

} 

は、上記よりももっと良い方法はありますか?

+0

あなたの最後のプロフィールは既にnull可能です。なぜ最新のプロフィールではないのですか?voiceId = profile.voiceId? – Brduca

+0

@Brducaもしそれがヌルであるか、または声のIDに一致するものがあればブロックに入りたい。 – Warpzit

+3

私は密でなければなりません。あなたの最初の例で何が間違っていて、どのように2番目の例がより良いですか? – vacawama

答えて

1

ソリューションは、わずか?です:

if lastProfile == nil || lastProfile?.id == profile.id { 
    print("true") 
    lastProfile = profile 
} 

lastProfileがnilまたはときlastProfileとプロファイルが同じIDを持っているとき、これが "真" 出力します。それ以外の場合は何も印刷しません。

+0

Gだよ。私が数ヶ月前にやったエラーのために== nilを使うことができなかったので、私の頭の中に入っていたので、私はさらに下を見ていませんでした... – Warpzit

0

lastProfileの場合はlet lastProfile: Profile? = ...として宣言されており、例えばidはまた、あなたのようにそれを使用することができ、オプションとして宣言されている:それはオプションの連鎖と呼ばれ、あなたが迅速docsにそれについて読むことができます

if let lastProfileId = lastProfile?.id { 
    // lastProfile is not nil and id is not nil 
} 
else { 
    // lastProfile is nil or lastProfile.id is nil 
} 

+0

構文を見て、それは1ブロックで行われていません... – Warpzit

-1
if let recentProfile = latestProfile where recentProfile.voieId != profile.voiceId { 
    useProfile(profile) 
    lastProfile = profile 
} 
+0

nilだったらブロックに入るでしょうか?いいえ...いいえ、いいえ、これはいいです。 – Warpzit

+0

申し訳ありませんがあなたの質問を誤解し、上記の答えはjboiによって良いです –

+0

それは大丈夫です。この愚か者を助けてくれてありがとう:)(私はbtwを投票していませんでした) – Warpzit