2015-05-06 22 views
1

我有一些較老的Swift代碼,用於編譯和工作,我使用.append動態構建數據結構。在升級到幾個編譯器版本後,我收到了「調用」錯誤中可怕的「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(EHcategory: "Food", EHname: "Joes Crab Shack")) 

我看不到任何東西在發生了什麼變化導致此一個,這樣尋求指導在這裏尋找至今。

回答

2

因爲你的結構中有let。 定義你的結構是這樣的:

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

如果你在你的struct常數,同時創造新的結構instances.The自動生成按成員初始化不接受let成員的參數,你不能爲他們提供初始值struct的初始化器。

+1

完美。這工作。我想早些時候的語言/編譯器版本並沒有像現在這樣對此進行限制。 – Kokanee

0

這取決於你的意圖與結構的屬性。你想讓他們變得不可變嗎?

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

「額外參數」錯誤你看到的是因爲編譯器已經具有的屬性值,所以它並不期望任何新的。這裏是「中間」的方式 - 一個屬性有一個默認值,而另一個沒有 - 這應該使它更清晰:

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")) 
相關問題