【问题标题】:Extra argument in call error mystery调用错误之谜中的额外参数
【发布时间】:2015-07-16 00:59:42
【问题描述】:

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

到目前为止,我在搜索导致此问题的原因时看不到任何内容,因此在此处寻求指导。

【问题讨论】:

    标签: ios swift swift-playground


    【解决方案1】:

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

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

    如果您的struct 中有常量,则在创建新结构实例时不能为它们提供初始值。自动生成的成员初始化器不接受 let 成员作为结构体初始化器的参数。

    【讨论】:

    • 完美。那行得通。我猜早期的语言/编译器版本并没有像现在这样限制这一点。
    【解决方案2】:

    这取决于你对结构属性的意图。你希望它们是可变的还是不可变的?

    如果是,那么@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"))
    

    您看到的“Extra Argument”错误是因为编译器已经具有属性值,因此它不需要任何新值。这是“中间”方式——一个属性有默认值,而另一个没有——这应该更清楚:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2018-01-02
      相关资源
      最近更新 更多