2016-06-09 50 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 :)