Cannot convert value of type '(() -> Void).Type' to expected argument type '() -> Void'の対処法
公開日: 2023-10-01 23:18:38
更新日: 2023-10-01 23:37:36
「Cannot convert value of type '(() -> Void).Type' to expected argument type '() -> Void'」
SwiftUIで作業していたらこちらのエラーが出た。
エラー Cannot convert value of type '(() -> Void).Type' to expected argument type '() -> Void' は、期待される型(() -> Void)と実際に提供された型((() -> Void).Type)が一致しないために発生しています。
具体的には、action: () -> Void の部分で () -> Void は型そのものを示しています。しかし、CustomButton の action 引数は実際のクロージャ(もしくは関数)を期待しているので、型そのものを渡すのではなく、その型に合った実際のクロージャや関数を渡す必要があります。
CustomButton(label: label, image: Image(systemName: "star.fill"), action: () -> Void)
こちらが実際のコード。action 引数に与えるべきは () -> Void の関数(もしくはクロージャ)ですが、現在 () -> Void.Type を与えていることがわかります。具体的には、action: () -> Void という部分が型そのものを指していて、それがエラーの原因です。
修正するには、実際のクロージャをactionに与える必要があります。例として、何もしないクロージャを以下のよう付けてあげると解決できます。
(action: { }の部分がクロージャです。)
CustomButton(label: label, image: Image(systemName: "star.fill"), action: {
// ここにクリック時のアクションを書く
})
このクロージャは、action 引数として CustomButton に渡され、ボタンがクリックされた時に実行されます。もし何かのアクションをこのクロージャの中に書くことで、そのアクションがボタンクリック時に実行されるようになります。