SwiftUIにおいて、コードの共通化を図りたく、C言語のように関数ポインタを利用して、関数を引数として渡せないか調べてみました。
関数ポインタとは違うようですが、関数を引数に渡す方法がありましたので、紹介します。
使い方
関数を引数に取るためには以下のような関数を宣言することでできます。
func 関数名(function:引数で呼び出す関数の戻り値の型)->関数の戻り値
日本語で説明するとわかりづらいかもしれませんが、コード例を見ると難しくないと思います。
コード例
以下のコードは、funcCを介して、funcAまたは、funcBの戻り値を表示するプログラムです。
funcCは、引数で渡された関数の戻り値を自身の戻り値として文字列を返す関数です。
funcAとBはそれぞれ文字列を返すだけの関数です。
import SwiftUI
struct FunctionSample: View {
var body: some View {
VStack {
// funcCを介してfuncAとBを呼び出しています
Text(funcC(function: funcA()))
Text(funcC(function: funcB()))
}
}
// 関数を引数に取り呼び出した関数の文字列を返す
private func funcC(function:String)->String {
return function
}
private func funcA()->String {
return "FuncA Called"
}
private func funcB()->String {
return "FuncB Called"
}
}
この使い方を応用すると、目的であったプログラムの共通化に役立てそうです。
