2016-06-09 54 views
0

我對swift和解開概念非常陌生。我正在嘗試將一個字符串數組存儲到NSUserDefaults中。打印結果到控制檯後,陣列顯示爲從NSUserDefaults列表解開字符串

[Optional("VarOne"), Optional("VarTwo")] //the two test variables stored in the array 

的目標是要實現:

["VarOne", "VarTwo"] 

我已經做了很多測試,以獲得類似的解決方案。我的代碼如下:

let defaults = NSUserDefaults.standardUserDefaults() 

    if let array = defaults.arrayForKey("listOfPlayers"){ 

     for i in array{ 
     print(i) 
     } 

    } 

我的主要問題是如何解包變量在這種情況下。爲了澄清,這些是字符串變量。

編輯:我包括我的代碼,我該陣列添加到NSUserDefaults的

let userDefaults = NSUserDefaults.standardUserDefaults() 
     userDefaults.setObject(listOfPlayers, forKey: "listOfPlayers") 
     userDefaults.synchronize() 
+0

沒有什麼錯與你有什麼,你要打印只是給你更多的信息比你想象的說明 – Wain

+0

所以,問題是,當我嘗試直觀地顯示這一點時,它也顯示爲可選。這顯然是應用程序清晰度的一個主要問題。 –

+0

您可能已使用字符串插值保存了數組中的字符串,該字符串插值添加了「可選」字面值。考慮儘可能使用非可選字符串。 – vadian

回答

1

試試這個:

let defaults = NSUserDefaults.standardUserDefaults() 

if let array = defaults.arrayForKey("listOfPlayers"){ 

    for i in array{ 
     let io = i as! AnyObject 
    print(io) 
    } 

} 
0

您可以使用!要麼 ?運營商。

let defaults = NSUserDefaults.standardUserDefaults() 

    if let array = defaults.arrayForKey("listOfPlayers"){ 

     for i in array { 
      if let value = i as? String { 
      print(value) 
      } 
     } 
    } 
+0

這些實際上是字符串變量,當我嘗試?字符串發生錯誤:鍵入字符串?不符合協議「SequenceType」 –

+0

我編輯了我的答案。 – mohamede1945

+0

請確定?字符串在「我」而不是「數組」變量上。 – mohamede1945

0

嘗試以下操作:

if NSUserDefaults.standardUserDefaults().objectForKey("listOfPlayers") != nil 
{ 
    let array = NSUserDefaults.standardUserDefaults().objectForKey("listOfPlayers") as! [String] 

    for i in array 
    { 
     print(i) 
    } 
} 

可以解開整個陣列中的一個去,但你,你是否NSUserDefaults的中存在數組就不能這樣做,在有條件的。

+0

不幸的是,這並不起作用 –

+0

它應該...只是測試它。你是否複製了包含第三行中的「as![String]」部分的所有代碼? – gdd

+0

請檢查我的編輯@gdd –

0

首先,arrayForKey將返回一個可選的AnyObject類型數組,即[AnyObject]?在你的場景中,這個數組包含可選的字符串。

if let optionalStringArray = NSUserDefaults.standardUserDefaults().arrayForKey("listOfPlayers") { 
// Now you'll be having an array of AnyObject, in your case you have array of optional string 
for optionalString in optionalStringArray { 
    if let str = optionalString as? String { 
    print(str) // You got your string value here 
    } 
} 

HTH :)