【问题标题】:Function declared with a parameter of type Dictionary shows another parameter type使用 Dictionary 类型的参数声明的函数显示了另一种参数类型
【发布时间】:2014-10-12 05:49:33
【问题描述】:

我遇到了一个问题,我找不到解决方案,我有一个对象 Article 的扩展,它有一个函数,它使用字典中包含的数据创建对象,作为参数传递给函数,这是代码:

protocol EntityProtocol {

     mutating func createEntityWithDictionary(dictionary: Dictionary<String, AnyObject>)

}


extension Article: EntityProtocol {

  func createEntityWithDictionary(dictionary: Dictionary<String, AnyObject>) {

    var article: Article! = ModelManager.instance.insertNewEntityName("Article") as Article

    for (key: String, value: AnyObject) in dictionary {

        switch key {

        case kContentTypeKey:

            article.contentType = value as String

        case kEditorsPickKey:

            article.editorsPick = value as Bool

        default:

            println("Default")

        }

    }

  }

}

好的,所以在另一个类中,我调用了将字典作为参数传递的函数,但是当我编写Article.createEntityWithDictionary时,它会自动完成方法的名称,但参数的类型是Article而不是Dictionary ,如果我将字典作为参数传递,XCode 会说“NSDictionary 不是 'Article' 的子类型”。

我在这里错过了什么?

【问题讨论】:

  • 请尝试使用新的字典语法糖:[String:AnyObject] 而不是Dictionary&lt;String, AnyObject&gt;
  • 已完成,但仍然出现错误 'NSDictionary' is not a subtype of 'Article'... :(
  • 问题是,当我写 func 名称的开头时,自动完成显示: ([String:AnyObject]) -> Void createEntityWithDictionary(self.Article) 我不明白为什么当我明确定义我想要一本字典时,将文章类型作为参数..

标签: ios ios7 swift ios8 xcode6-beta5


【解决方案1】:

好的,我终于找到了问题所在。问题是我试图像访问类而不是像对象一样访问 Article,因此它无法访问该方法。换行解决了

Article.createEntityWithDictionary(dictionary)

与:

ArticleManager.instance.createArticle().fillEntityWithDictionary(dictionary)

这样做,当我们在执行之前访问方法 fillEntityWithDictionary(它是方法 createEntityWithDicitonary)时,我在 ArticleManager 中创建了一个对象 Article,它是一个管理与 Article 类型对象相关的所有操作的单例。有了有效对象后,执行fillEntityWithDictionary就没有问题了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2019-01-30
    • 2011-10-02
    • 2021-07-17
    • 2020-04-12
    相关资源
    最近更新 更多