我使用的是enum
和tuple
,其值为enum case。我从[String:String]常量中获取值时遇到了麻烦。
我不知道如何修复它,它必须是一个陷阱,但我不知道在哪里,因为key
肯定是字符串:
enum DictTypes : String {
case settings
case options
case locations
}
enum FileTypes : String {
case json
case pList
}
func getCodebookUrlComponent() -> String
{
var FileSpecs: (
dictType: DictTypes,
fileType: FileTypes,
redownload: Bool
) = (.settings, .json, true)
let codebooks = [
"settings" : "settings",
"options" : "options"
]
let key = self.FileSpecs.dictType // settings or options
if let urlComponent = codebooks[key] {
return urlComponent
}
return ""
}
此行if let urlComponent = codebooks[key]
出现错误:
对成员'下标'的模糊引用
答案 0 :(得分:3)
在这种情况下你应该使用.rawValue
:
if let urlComponent = codebooks[key.rawValue]{
return urlComponent
}
出现此问题是因为此行中的let key = self.FileSpecs.dictType
您收到了FileSpecs
类型的密钥。 <{1}}中实现的subscript
将不符合该值类型。
Array
在您的案例中返回您在rawValue
中分配的字符串值。
答案 1 :(得分:1)
由于enum case的值肯定是字符串,我会这样输入:
let key = FileSpecs.dictType.rawValue // "settings" or "options"
或
let key = String(describing: FileSpecs.dictType)
return codebooks[key]!