关于swift:从常量获取值时出错:对成员”下标”的引用不明确

Error when getting value from constant : Ambiguous reference to member 'subscript'

我使用具有枚举大小写值的enumtuple。我很难从[String:String]常量中获取值。

我不知道如何解决它,它必须是一个陷阱,但是我不知道在哪里,因为key肯定是字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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]带有错误:

Ambiguous reference to member 'subscript'


在这种情况下,应使用.rawValue

1
2
3
if let urlComponent = codebooks[key.rawValue]{
   return urlComponent
}

由于在此行中的let key = self.FileSpecs.dictType,您会收到FileSpecs类型的密钥,因此会出现此问题。并且Array中实现的subscript将不符合该值类型。

如果是

rawValue,则返回您在enum中分配的字符串值。


由于枚举大小写的值肯定是字符串,因此我将这样输入:

1
let key = FileSpecs.dictType.rawValue //"settings" or"options"

1
2
3
let key = String(describing: FileSpecs.dictType)

return codebooks[key]!