Xcode抱怨“可选类型'设置的值?'必须解包以引用已包装基本类型'Set'的成员'contains'“
功能如下:
func talks_to (_ dialog_dict: Dictionary<String, Set<String>>, one: String, two: String) -> Bool {
return dialog_dict[one].contains(two)
}
这是一个嵌套函数,仅用于使逻辑更清楚,并且外部代码保证参数不为空。我如何迅速理解这一点?
答案 0 :(得分:3)
每次使用下标从字典中获取项目时,结果都是Optional
,因为可能找不到您使用的密钥。 Sh_Khan给了您一个很好的优雅解决方案:(已投票)
return dialog_dict[one]?.contains(two) == true
之所以可行,是因为nil不等于true,但是编译器将对其展开包装,并检查其中的值以查看是否等于nil(如果不是nil)。因此,如果dialog_dict[one]
的结果为nil或false,则它不等于true。仅当dialog_dict
包含键one
的值且该值为true
时,表达式才会返回true
。
答案 1 :(得分:2)
制作
return dialog_dict[one]?.contains(two) == true
或
return dialog_dict[one]!.contains(two)
此dialog_dict[one]
返回可选