# How Can I Get The Value In The Load Function To Not Be An Optional?

## 21 March 2022 - 1 answer

Im trying to get the value given in the Load() function to unwrap so it isnt an optional, but it wont unwrap any further and its still returning an optional.

``````let t = true; let f = false
var saved: [Int: Any?] = [0: nil]

func prog() {

Save(Key: 1, Value: 7)
Save(Key: 2, Value: Condition(Save: 1, Value: 9, Return: f))
Display(Save: 2)
Display(Save: 3)

}; prog()

func Save(Key: Int?, Value: Any) {
var _Key = Key ?? 0
saved[_Key] = Value
}

public func Load(Save: Int?) -> Any {
var _Key = Save ?? 0
return saved[_Key]!
}

func Display(Save: Int?) {
var _Key = Save ?? 0
if saved[_Key] == nil {
print("nil")
} else {
print(saved[_Key]!!)
}
}

func DisplayValue(Value: Any?) {
print(Value! ?? "nil")
}

func Condition(Save: Int?, Value: Any?, Return: Any) -> Any {
var _Key = Save ?? 0
if saved[_Key] is String && Value is String {
if saved[_Key] as! String == Value as! String {
return Return ?? ""
}
}
else if saved[_Key] is Float && Value is Float {
if saved[_Key] as! Float == Value as! Float {
return Return ?? ""
}
}
else if saved[_Key] is Double && Value is Double {
if saved[_Key] as! Double == Value as! Double {
return Return ?? ""
}
}
else if saved[_Key] is Int && Value is Int {
if saved[_Key] as! Int == Value as! Int {
return Return ?? ""
}
}
else if saved[_Key] is Bool && Value is Bool {
if saved[_Key] as! Bool == Value as! Bool {
return Return ?? ""
}
}
else if saved[_Key] == nil || Value == nil {
return ""
}
if Return is Bool {
if Return as? Bool == false {
return true
} else {
return false
}
}
return ""
}
``````

Ive gone through the entirety of the code. No function is returning optionals or saving optionals to the saved dictionary. Can someone explain where the optional is occurring, and/or how to prevent it?

``````var saved: [Int: Any?] = [0: nil]
``````

This says that the returned values of this dictionary are `Any?`. So subscripting `saved[key]` will return an `Any??` (i.e. an `Optional<Optional<Any>>`), since that `Any?` might or might not exist, since the key might not be in the dictionary. `Any??` is a type that nightmares are made of. Never allow `Any??` to exist. Do not create `Any?` on purpose. And strongly avoid `Any`.

Replace `saved` with a proper type that doesn't rely on `Any`, and this problem will go away.

Following your style, the last line of `Load` needs two `!` to do what you expect (like your `Display` uses):

``````return saved[_Key]!!
``````

But this is deeply, deeply broken. You need to redesign your types, likely using an enum to replace Any.