はじめに
Swiftでクラスや構造体のインスタンスを作成する際、しばしば遭遇する「Extra argument in call」というコンパイルエラーについて、その原因と解決法をわかりやすく解説します。
エラーの原因:悪い例の提示
状況:
SwiftUIでのアプリ開発中、Match
という構造体のインスタンスを作成しようとしたところ、「Extra argument 'matchDate' in call」というエラーが発生。
コード例:
struct Match: Identifiable, Codable {
var id = UUID().uuidString
var matchDate: Date
// 他のプロパティ
init(date: Date, teamWhite: String, teamBlack: String) {
self.matchDate = date
// 初期化の実装
}
}
class MatchSetupViewModel: ObservableObject {
func saveMatchDetails() {
let match = Match(matchDate: Date(), teamWhite: "White", teamBlack: "Black")
// 保存ロジック
}
}
問題点:
Match
のイニシャライザはdate
という引数を期待しているが、saveMatchDetails
メソッドではmatchDate
という引数名を使用している。
解決方法:良い例の提示
修正後のコード:
class MatchSetupViewModel: ObservableObject {
func saveMatchDetails() {
let match = Match(date: Date(), teamWhite: "White", teamBlack: "Black")
// 保存ロジック
}
}
解説:
Match
のイニシャライザで要求されている引数名に合わせて、MatchSetupViewModel
内の関数でインスタンスを作成する際の引数名を修正。
まとめ
型だけじゃなく変数名を合わせることが大事!