[英]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.