调用错误之谜中的额外参数
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"))
我有一些较旧的 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"))