Swift には、引数として渡すことができるファースト クラスの関数があります。
func a() {
}
func b(x: ()) {
}
// Pass a to b…
b(a)
Swift には汎用関数があります。
func generic<T>(x: T) {
}
しかし、Swift ではジェネリック関数を引数として別の関数に渡すことができますか?
let anIntService = Service<Int>()
let astringService = Service<String>()
func attach<T>(service: Service<T>, to value: T) {
// Perform type safe attaching of `value` to `service`.
}
func doAttaching(attach: (Service<T>, to T)->Void) {
attach(anIntService, to: 42)
attach(aStringService, to: "Hello World!")
}
doAttaching(attach)
…または、ジェネリック関数の特定のインスタンス化のみを渡すことができますか?
これが可能であれば、ジェネリック関数を引数として受け入れる関数を定義するための構文を説明してください。
これがサポートされていない場合の回避策は、ジェネリック関数を構造体のメソッドなどとして定義し、その代わりに an を渡すことです。ただし、これは理想的ではありません。使用する関数は適切な呼び出し構文を取得できないため、次のことを行う必要があります。
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}