swift无法下标索引为“String”

时间:2015-10-22 02:06:38

标签: swift

我刚刚开始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

有人可以解释为什么会出现错误消息以及我如何解决它?

1 个答案:

答案 0 :(得分:0)

您在if 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
    }
}