从常量获取值时出错:对成员'下标'的模糊引用

时间:2016-09-21 13:13:23

标签: swift swift3

我使用的是enumtuple,其值为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]出现错误:

  

对成员'下标'的模糊引用

2 个答案:

答案 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]!