即使在展开时也得到 "Optional(<data value>)" 的值

Getting a value of "Optional(<data value>)" even when unwrapping

我正在尝试为 Alamofire 请求初始化参数。出于某种原因,其中一个参数的值总是以“Optional()”的值结束,即使我正在展开它也是如此。

这是我试过的...

var params : [String : Any] = [:]
    
params["facility_id"] = facility.facilityId ?? 0
if facility.email != nil {
    params["email"] = facility.email!
}
if let url = facility.facebookUrl {
    params["facebook_url"] = url
}

params["facebook_url"] 的值最终为 "Optional(Facebook.com)"

我试过了(只是为了测试)

params["facebook_url"] = facility.facebookUrl!

而且我的值中仍然有“可选(”这个词。

如何让“Optional()”消失?

当您访问字典时,它 returns 其值类型是可选的,因为它不知道运行时某个键是否在字典中可用。如果密钥存在,则返回它的值,但如果不存在,则我们得到 nil 值。

使用可选绑定访问展开的值:

if let url = params["facebook_url"] {
    print(url) // facebook url
}

如果双重可选解包:

if let urlOptional = params["facebook_url"], let value = urlOptional {
    print(value) // facebook url
}

注意:还要检查设置 'facebook_url' 键值的来源。