Swiftには引数として渡すことができるファーストクラスの関数があります。迅速なファーストクラスジェネリック機能?
func a() {
}
func b(x:()) {
}
// Pass a to b…
b(a)
スウィフトには汎用機能があります。
func generic<T>(x: T) {
}
しかし、スウィフトは、私は別の関数の引数としてジェネリック機能を通過させていますか?
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)
...それとも、ジェネリック関数の特定のインスタンスを渡すことができますか?
可能であれば、ジェネリック関数を引数として受け入れる関数を定義するための構文を説明してください。
これがサポートされていない場合、回避策は、汎用関数をstructなどのメソッドとして定義し、代わりにそれを渡すことです。これは、かかる機能は、このような素敵な呼び出し構文を取得していないとして、彼らがする必要がある、しかし理想的ではありません。
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}
返信ありがとうございますが、私はこれが私の必要とするものではないと思います。したがって、あなたの例で呼び出された関数 'callFunction'は、まだジェネリック関数を取得していません。これは、あなたが呼び出す 'parameter'の型(この場合は' 123')によって決まる特定のインスタンスを取得しています。あなたの例で 'identity 'を_fulful_関数として' callFunction'に渡したいと思います。 'callFunction'の定義は、' function'引数を複数の型で呼び出すことができます。 – Benjohn
ああ私は、申し訳ありませんが、私は投稿を間違って見て参照してください:( – Alexander
問題ありません!ありがとうとにかく:-) – Benjohn