swift - 从常量 : Ambiguous reference to member 'subscript' 获取值时出错

标签 swift swift3

我正在使用具有枚举大小写值的enumtuple。我无法从 [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] 出现错误:

Ambiguous reference to member 'subscript'

最佳答案

对于这种情况,您应该使用.rawValue:

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

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

rawValue 在您的情况下返回您在enum 中分配的字符串值。

关于swift - 从常量 : Ambiguous reference to member 'subscript' 获取值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39617591/

相关文章:

swift - 如何实现 Evenkit 以请求权限

swift - NSTableView 在初始加载时未更新

swift3 - 如何在 Swift 3 中将图像从文档目录显示到 UIImageView?

swift - 用约束扩展字典

ios - 在 Firebase 实时数据库 swift 上 append 一个列表

swift3 - 在 swift 3.0 中使用 XMPP openfire 发送消息

ios - Swift - 如何搜索结构数组

ios - twitterKit 登录完成 block 永远不会执行

ios - 如何在 swift 中将 Collection View 转换为圆形 icarousel

ios - 从字符串swift 3中获取特定范围的字符