首页 文章

如何在swift中安全地展开nil值?

提问于
浏览
-1

我对swift很新,我正在努力了解如何处理nil vars ......

我有两个词典:

var currencyname: NSDictionary = [
        "CNY": "Chinese Yuan",
        "PLN": "Polish Zloty"
        "EUR": "Euro"
]

var rawrates NSDictionary = [
        "CNY": "1.34",
        "PLN": "1.456"
]

我使用元组字典组合它们:

var combinedDictionary:[String:(name:String,rate:String)] = [:]

for key in currencyname.keys.array {
    combinedDictionary[key] = (currencyname[key]!,rawrates[key]!)
}

但是我收到 found nil while unwrapping an Optional value 错误,因为 currencyname 字典中的键 EURrawrate 字典中的任何键都不匹配 .

我知道在使用 let if 组合它们之前,我必须以某种方式检查两个字典中是否存在密钥?但我对语法感到困惑......我也尝试使用可选值而没有成功 .

所以我的问题是如何组合这两个词典并省略 EUR 的combinedDictionary,因为 rawrate 字典中没有匹配的键?

谢谢您的帮助!

1 回答

  • 1

    我想你所追求的是这样的:

    let currencyname = [
            "CNY": "Chinese Yuan",
            "PLN": "Polish Zloty",
            "EUR": "Euro"
        ]
    
        let rawrates = [
            "CNY": "1.34",
            "PLN": "1.456"
        ]
    
        var combinedDictionary = [String:(name:String,rate:String)]()
        for key in currencyname.keys {
            if let val1 = currencyname[key], val2 = rawrates[key] {
                combinedDictionary[key] = (val1,val2)
            }
        }
    

    但如果没有更明确的问题陈述,有点难以确定 . 在任何情况下,这都不是我建议的 . 在我看来,这是一个更好的结果:

    let currencyname = [
        "CNY": "Chinese Yuan",
        "PLN": "Polish Zloty",
        "EUR": "Euro"
    ]
    
    let rawrates = [
        "CNY": "1.34",
        "PLN": "1.456"
    ]
    
    struct Currency {
        let name : String
        let rate : String
    }
    
    var combinedDictionary = [String:Currency]()
    for key in currencyname.keys {
        if let val1 = currencyname[key], val2 = rawrates[key] {
            combinedDictionary[key] = Currency(name:val1, rate:val2)
        }
    }
    

相关问题