2016-06-28 4 views
0

私のコードでは、学生の履歴データを取り込むために保存されたデータの配列を取得する必要があります。私は次のコード行を使用しています。これは素晴らしい動作です。初回実行時にコードをバイパス

returnedArray = UserDefaults.standard().object(forKey: "studentHistoryArray")! as! NSArray as! [[String]] 

問題は、プログラムの最初(最初)の実行にあります。配列はまだ作成/保存されていないので、このステップをスキップする必要がありますが、プログラムの最初の実行時にのみ行います。プログラムの最初の実行時にのみこの行のコードを実行する方法はありますか?経験則として

+0

'UserDefaults.standard()。オブジェクト(forKey:" studentHistoryArray ")'が存在するかどうかを確認しますか? – Larme

+0

私は混乱しています。最初に、プログラムの初回実行時にスキップする必要があると言います。次に、プログラムの最初の実行時にのみ実行する方法があるかどうかを尋ねます。それらは2つの相反する考えです。 –

+0

私の悪いです。私は最初の実行時にこのコード行をスキップする方法があるかどうかを尋ねることを意味しました。とにかくありがとう。以下の推奨された解決策がそのトリックを行いました。 – Westerndays

答えて

1
var defaults = UserDefaults.standard() 
let studentHistoryArrayKey = "studentHistoryArray" 
var returnedArray = defaults.object(forKey: studentHistoryArrayKey) as? [[String]] 
// I don't think that you need to use the intermediary cast to NSArray, but 
// I could be wrong. 

if returnedArray == nil { 
    returnedArray = [[String]]() 
    defaults.setObject(returnedArray, forKey: studentHistoryArrayKey) 
} 

// Now it's guaranteed to be non-nil, so do whatever you need to do with the array. 

あなたに自由にあなたの例のよう!を使用している場合、何かが壊れになるだろう。

+0

ありがとうございました。あなたが提案したコードは完全に機能しました。 Swiftのエントリレベルのプログラマとして、私は十分にあなたに感謝することはできません。 – Westerndays

関連する問題