I've stored data sent back by delegate as a user default and I'm trying to prepare it to send in a segue. I am able to send it in a segue, the problem I'm having is the data comes out in the form "optional[Data]"
I know what optional means, but it doesn't let me unwrap UserDefault like an optional, even though it says it is optional?
Here's the code:
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")
}
}
The error is:
"Initializer for conditional binding must have Optional type, not 'UserDefaults'" on line
if let unwrap = defaults{
Why can't I unwrap it like this?
Another Attempt:
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
}
Nothing is appended this way, Tosend is empty?
To save something to user defaults:
UserDefaults.standard.set("It is a string", forKey: "meaningfulIdentifier")
To get something out from user defaults:
if let anyString = UserDefaults.standard.value(forKey: "meaningfulIdentifier") as? String {
// Do something with anyString
}
You only need optional binding when you are dealing with getting something out from user defaults. For the data part you need this optional binding, not the User Defaults
itself.