从 NSUserDefaults 列表中解包字符串

Unwrapping String from NSUserDefaults list

我对 swift 和展开概念还很陌生。我正在尝试将一个字符串数组存储到 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()

你可以使用!要么 ?运算符。

let defaults = NSUserDefaults.standardUserDefaults()

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

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

尝试以下操作:

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

    for i in array
    {
       print(i)
    }
}

您可以一次性解包整个数组,但您不能在检查数组是否存在于 NSUserDefaults 中的条件下执行此操作。

首先,arrayForKey 将 return 一个 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:)

试试这个:

   let defaults = NSUserDefaults.standardUserDefaults()

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

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

}