调用错误之谜中的额外参数

Extra argument in call error mystery

我有一些较旧的 Swift 代码用于编译和工作,我使用 .append 动态构建数据结构。升级到几个更新的编译器版本后,我遇到了可怕的 "Extra Argument ' ' in call" 错误。我将代码缩减为:

struct  EHSearch {
    let EHcategory : String = ""
    let EHname : String = ""
}

var  myEHSearch = [EHSearch]()

// Call to dynamically append the results
// Extra argument: 'EHcategory' in call

myEHSearch.append(EHSearch(EHcategory: "Food", EHname: "Joes Crab Shack"))

到目前为止,我在搜索导致此问题的更改时没有看到任何内容,因此请在此处寻求指导。

因为你的结构中有 let。 像这样定义你的结构:

struct EHSearch {
    var EHcategory : String = ""
    var EHname : String = ""
}

如果您的 struct 中有常量,则在创建新结构实例时不能为它们提供初始值。自动生成的成员初始化器不接受 let 成员作为结构初始化器的参数。

这取决于您对结构属性的意图。您是否希望它们可变?

如果是,那么@sasquatch 的回答就可以了。

如果没有,那么您需要确保只为它们分配一次值。正如您已经在结构声明(默认值)中所做的那样,您不能为它们分配新值。但作为一个结构,它们不需要有默认值——此外,结构自动接收一个成员初始化器。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

所以这是不可变属性的变体:

struct  EHSearch {
    let EHcategory : String
    let EHname : String
}

var  myEHSearch = [EHSearch]()

// Call to dynamically append the results
// Extra argument: 'EHcategory' in call

myEHSearch.append(EHSearch(EHcategory: "Food", EHname: "Joes Crab Shack"))

您看到的 "Extra Argument" 错误是因为编译器已经有了这些属性的值,所以它不需要任何新的值。这是 "middle" 方式 - 一个 属性 有默认值而另一个没有 - 这应该更清楚:

struct  EHSearch {
    let EHcategory : String = ""
    let EHname : String
}

var  myEHSearch = [EHSearch]()

// Call to dynamically append the results
// Extra argument: 'EHcategory' in call

myEHSearch.append(EHSearch(EHname: "Joes Crab Shack"))