如何使用guard来解除字典中的选项?

时间:2015-09-09 07:54:12

标签: swift optional

我正在解析带有东西的字典以生成Rocket对象。在解析方法中,我使用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? String,此代码无法编译。如果我删除它,rocketName将是一个字符串?是否可以编写guard语句,以便返回String

1 个答案:

答案 0 :(得分:1)

您可以使用与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"](具有。{1}}的情况 类型String??)不是nil,而是未包装的值(具有 类型String?)也不是nil。双重打开的价值 (类型String)然后被分配到rockedName