繁体   English   中英

通话错误谜题中的额外参数

[英]Extra argument in call error mystery

我有一些旧的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"))

到目前为止,我在寻找导致这一变化的变化方面看不到任何东西,因此请在此处寻求指导。

因为你已经let你的结构。 像这样定义您的结构:

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

如果struct有常量,则在创建新的结构实例时不能提供它们的初始值。自动生成的逐成员初始化器不接受let成员作为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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM