-1

我已将委托发回的数据存储为用户默认值,并且我正在尝试准备将其发送到 segue 中。我可以在 segue 中发送它,我遇到的问题是数据以"optional[Data]"我知道可选含义的形式出现,但它不会让我像可选的那样解开 UserDefault,即使它说它是可选的?

这是代码:

 func DataToPass(ArrayName: [String]) {
    print("Check ArrayContent--->",ArrayName)
    var DCollect = [String]()
    var CCollect = [String]()
    DCollect.append(ArrayName[0])
    CCollect.append(ArrayName[1])
    let defaults = UserDefaults.standard
    if let unwrap = defaults{
        unwrap.set(DCollect, forKey: "DCollect")
        unwrap.set(CCollect, forKey: "CCollect")
    }
}

错误是:

“条件绑定的初始化程序必须具有可选类型,而不是'UserDefaults'”在线if let unwrap = defaults{

为什么我不能像这样解开它?

另一种尝试:

    func DataToPass(ArrayName: [String]) {
        print("Check",ArrayName)
        UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
        }


     override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "SegueInfo"{
        let firstController = segue.destination as! ViewController
        if let Tosend = UserDefaults.standard.value(forKey: 
        "ToCollect") as? String {
        Collect.append(Tosend)
        }
        firstController.AllData = Collect
            }

这种方式没有附加任何内容,Tosend 是空的吗?

4

4 回答 4

2

要将某些内容保存到用户默认值:

UserDefaults.standard.set("It is a string", forKey: "meaningfulIdentifier")

要从用户默认值中获取一些信息:

if let anyString = UserDefaults.standard.value(forKey: "meaningfulIdentifier") as? String {
    // Do something with anyString
}


当您处理从用户默认值中获取某些内容时,您只需要可选绑定。对于数据部分,您需要此可选绑定,而不是User Defaults本身。

于 2017-06-29T08:41:46.190 回答
1

为什么它告诉我无法打开 UserDefaults?

该错误消息试图向您解释UserDefaults.standard不是一种Optional类型。这意味着它不是 type Optional<UserDefaults>,这意味着它不能使用if-let语句来解包它。

您要解包的不是UserDefaults已通过该UserDefaults.standard属性作为单例提供的对象。

我能解开什么?

您要解包的是您要检索的变量。

这些将是您必须处理的可选类型。这是Optional因为它可能已经存在,UserDefaults也可能不存在。

如何检索存储到的字符串数组UserDefaults

使用 key DCollect,使用适当的方法(即stringArray(forKey:)检索它。

let defaults = UserDefaults.standard

if let dcollect = defaults.stringArray(forKey: "DCollect") {
   // it already exists; now use the dcollect variable
} else {
   // it does not exist; do something (i.e. add dcollect value?) if it does not exist yet
}

如何将字符串数组存储到UserDefaults?

let defaults = UserDefaults.standard
let value : [String] = ["My", "Very", "Eager", "Pluto"]
standard.set(value, forKey: "DCollect")
于 2017-06-29T08:34:25.160 回答
0

我不确定您为什么要打开包装UserDefaults.standard,因为您不需要。它不是可选的,因此您会从 Xcode 中得到错误。

您可以像这样直接将值添加到 de UserDefaults:

let u = UserDefaults.standard u.set(["a", "b", "c"], forKey: "yourKey")

于 2017-06-29T08:44:48.773 回答
0

首先,别忘了import Foundation

然后试试这段代码

func DataToPass(ArrayName: [String]) {
    UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if segue.identifier == "SegueInfo"{
        let firstController = segue.destination as! ViewController
        if let Tosend = UserDefaults.standard.stringArray(forKey: "ToCollect") as? [String] {
            Collect += Tosend
        }
        firstController.AllData = Collect
    }
}
于 2017-06-29T10:44:00.410 回答