我有一些较旧的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"))
到目前为止,我无法看到有什么变化导致这个变得如此寻求指导。
答案 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"))