swift无法为索引为“String”的[String:DataModelBase.type]类型的值下标

swift无法为索引为“String”的[String:DataModelBase.type]类型的值下标,swift,Swift,我刚刚开始使用swift,并尝试复制我在obj-c中使用的功能。基本上,它是一个json到对象模型的映射。我正在使用的代码看起来应该可以工作,但是我在标题中看到了错误,不知道为什么或者如何修复它 下面是一些示例代码: struct foo { let modelMap = ["DataModelBase" : DataModelBase.self, "ManifestDataModel" : ManifestDataModel.self] func cr

我刚刚开始使用swift,并尝试复制我在obj-c中使用的功能。基本上,它是一个json到对象模型的映射。我正在使用的代码看起来应该可以工作,但是我在标题中看到了错误,不知道为什么或者如何修复它

下面是一些示例代码:

struct foo {
  let modelMap = ["DataModelBase" : DataModelBase.self,
                  "ManifestDataModel" : ManifestDataModel.self]

func createModel(classString: String, json: Dictionary<String, AnyObject>) -> AnyObject {
  if let modelClass: DataModelBase = modelMap[classString] {
    let model = modelClass.initWithDictionary(json)
    return model
  }
  return json
}
该错误正在该行上触发: 如果让modelClass:DataModelBase=modelMap[classString]

DataModelBase是一个基类,ManifestDataModel子类DataModelBase

有人能解释一下错误消息发生的原因以及我如何修复它吗?

如果let语句可能是

if let modelClass: DataModelBase = modelMap[classString] as? DataModelBase {
仅当modelMap[classString]是DataModelBase时,此操作才会运行

编辑:

class DataModelBase {
    required init(json: [String:AnyObject]) {

    }
}

class ManifestDataModel: DataModelBase {
    required init(json: [String:AnyObject]) {
        super.init(json: json)
    }
}

struct foo {
    let modelMap = ["DataModelBase" : DataModelBase.self,
        "ManifestDataModel" : ManifestDataModel.self]

    func createModel(classString: String, json: [String: AnyObject]) -> AnyObject {
        if modelMap[classString] != nil {
            if let modelType = modelMap[classString] {
                let model = modelType.init(json: json)
                return model
            }
        }
        return json
    }
}

我把它改成了那样,但是现在我从DataModelBase得到了一个警告?对不相关类型“DataModelBase”的访问总是失败。如果我把它改成as?DataModelBase.Type我将错误从“DataModelBase.Type?”向下转换为DataModelBase.Type“仅展开选项”;你想用“!”吗?谢谢你的帮助,但是hrmm。。。现在,我无法将“Dictionary”类型的值转换为预期的参数类型“DataModelBase”,很抱歉这样做有点晚,但我尝试构建上面的更新代码,这似乎很好。希望这对你有用