2017-12-20 16 views
1
if let seen: Bool = defaults.bool(forKey: UtilitiesKeys.mainTutorialSeen) { 
    return seen 
} 
return false 

私がしなければ、このSWIFTは私の問題を示しています。optionalsのチェックに使用されるタイプの非オプション 式「ブール」「ブール」は常に成功し、に「ブール」からユーザーデフォルトから値を安全にアンラッピングするにはどうすればよいですか?

条件キャスト。

私のキーの値がないかもしれないので、強制的にアンラップしません。今は明らかにこのように機能していますが、迅速に不平を言わずに値を安全にアンラップするにはどうすればいいですか?

ドキュメントで示唆したように、私は...だけでなく、ガードを使用する

+0

ええと、同じ問題が表示されますが、d0yeの回答が有効です。まだありがたいです:) –

答えて

0

を試してみました:

-boolForKey:は、それがBOOLに返された値を変換することを除いて、-objectForKey:と同等です。値がNSNumberの場合、値が0、それ以外の場合はYESの場合はNOが返されます。値がNSStringの場合、"YES"または"1"の値はYESを返し、"NO","0"、または他の文字列の値はNOを返します。値が存在しないか、BOOLに変換できない場合は、NOが返されます。

open func bool(forKey defaultName: String) -> Bool 

それはもうオプションではありません。だから、if letでキャストする必要はありません。あなたは直接使用することができます

let seen = defaults.bool(forKey: UtilitiesKeys.mainTutorialSeen) 
+0

ああ、ありがとう、それをやっている最短の方法からそれを行うかもしれない。 –

1
if let seen = UserDefaults.standard.object(forKey: UtilitiesKeys.mainTutorialSeen)) as? Bool { 
     return seen 
    }else { 
     return false 
    } 
+0

パーフェクト、ありがとう! –

+0

このコードがどのように問題を解決するかについての説明や説明を入力してください。これにより、より多くの読者に役立つでしょう。 –

1

アップルのドキュメントは言う:

/*! -boolForKey:は、-objectForKey:と同等です。ただし、戻り値をBOOLに変換する点が異なります。値がNSNumberの場合、値が0の場合はNO が返され、そうでない場合はYESが返されます。値が NSStringの場合、 "YES"または "1"の値は "YES"を返し、 "NO"、 "0"などの値はNOを返します。値が指定されていないか、または をBOOLに変換できない場合は、NOが返されます。

open func bool(forKey defaultName: String) -> Bool 

結合条件付きの初期化子は、 'ブール'

あなたはこのヘルプを願って、オプションの種類を持っていない必要があります。

関連する問題