Balbas Code

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 は型そのものを示しています。しかし、CustomButtonaction 引数は実際のクロージャ(もしくは関数)を期待しているので、型そのものを渡すのではなく、その型に合った実際のクロージャや関数を渡す必要があります。





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 に渡され、ボタンがクリックされた時に実行されます。もし何かのアクションをこのクロージャの中に書くことで、そのアクションがボタンクリック時に実行されるようになります。