簡體   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