Swift 如何使用guard取消字典中的可选项?

Swift 如何使用guard取消字典中的可选项?,swift,optional,Swift,Optional,我正在用东西解析字典以生成火箭对象。在解析方法中,我使用guard进行检查。是否可以使用guard同时检查字典中的现有值并将其展开 let rocketDictionary : [String : String?] = [ "name" : nil, "numberOfThrusters" : nil ] func generateRocketSchematics(rocketDictionary : [String : String?]) { guard let rocketNam

我正在用东西解析字典以生成火箭对象。在解析方法中,我使用guard进行检查。是否可以使用guard同时检查字典中的现有值并将其展开

let rocketDictionary : [String : String?] = [ "name" : nil, "numberOfThrusters" : nil ]

func generateRocketSchematics(rocketDictionary : [String : String?]) {

    guard let rocketName = rocketDictionary["name"] as? String else {
         print("no rocket name")
         return
    }

    print(rocketName)

}

这段代码不会编译,因为
as?字符串
。如果我删除它,rocketName将是一个字符串?是否可以编写guard语句以返回字符串

您可以将模式匹配与
guard/case
一起使用:

func generateRocketSchematics(rocketDictionary : [String : String?]) {

    guard case let rocketName?? = rocketDictionary["name"] else {
        print("no rocket name")
        return
    }

    print(rocketName) // rocketName is a String
}
rocketName???
的同义词。Some(.Some(rocketName))
,所以

 case let rocketName?? = rocketDictionary["name"]
匹配
rocketDictionary[“name”]
(具有 类型
String???
)不是
nil
,且未包装的值(具有 类型
字符串?
)也不是
nil
。双重展开值 (类型为
String
)然后分配给
rockedName