swift无法为索引为“String”的[String:DataModelBase.type]类型的值下标
我刚刚开始使用swift,并尝试复制我在obj-c中使用的功能。基本上,它是一个json到对象模型的映射。我正在使用的代码看起来应该可以工作,但是我在标题中看到了错误,不知道为什么或者如何修复它 下面是一些示例代码:swift无法为索引为“String”的[String:DataModelBase.type]类型的值下标,swift,Swift,我刚刚开始使用swift,并尝试复制我在obj-c中使用的功能。基本上,它是一个json到对象模型的映射。我正在使用的代码看起来应该可以工作,但是我在标题中看到了错误,不知道为什么或者如何修复它 下面是一些示例代码: struct foo { let modelMap = ["DataModelBase" : DataModelBase.self, "ManifestDataModel" : ManifestDataModel.self] func cr
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”,很抱歉这样做有点晚,但我尝试构建上面的更新代码,这似乎很好。希望这对你有用