呼叫错误之谜中的额外参数

时间:2015-05-06 04:18:31

标签: ios swift swift-playground

我有一些较旧的Swift代码,用于编译和工作,我使用.append来动态构建数据结构。升级到几个较新的编译器版本后,我得到了可怕的"额外的参数' '在电话"错误。我把代码简化为:

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"))

到目前为止,我无法看到有什么变化导致这个变得如此寻求指导。

2 个答案:

答案 0 :(得分:2)

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

let

如果{{1}}中有常量​​,则在创建新结构实例时无法提供初始值。自动生成的成员初始化程序不接受{{1}}成员作为参数struct的初始化器。

答案 1 :(得分:0)

这取决于你对struct的属性的意图。你想要它们是否可变?

如果是,那么@sasquatch的答案就行了。

如果没有,那么您需要确保仅为它们分配一次值。正如您在结构声明中所做的那样(默认值),您无法为它们分配新值。但作为结构,它们不需要具有默认值 - 此外,struct自动接收成员初始化程序。 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"))

您看到的“额外参数”错误是因为编译器已经具有属性值,因此它不期望任何新属性。这是“中间”方式 - 一个属性具有默认值而另一个属性没有 - 这应该更清楚:

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"))