2016-11-29 3 views
3

私はパラメータとして任意の機能を取り、それをSwiftで実行できる関数を記述しようとしています。私はこのアプローチを試してみました。その後、パラメータとして関数を渡してSwiftで実行するには?

public func anyFunc<P, T> (_ function: (P...) -> T) { 
    _ = function()  
} 

とでそれをしよう:

anyFunc(print("hello")) 

これはERROR: 'print' produces '()', not the expected contextual result type '(_...) -> _'

どのように私はこれを達成(そしてそれが実現可能である)ことができますを生成しますか?

+0

?渡された関数がvoidを返しますか? –

+3

'print(" hello ")'は結果を返す関数 'print'に対して_a call_です(空のタプル'() ')。したがって、 'anyFunc'へのあなたの呼び出しは' anyFunc(()) 'と等価です。これは当然' anyFunc'の引数の不一致です。 – dfri

+0

一般に、任意の数の引数を取る場合、引数を渡さずに 'function()'をどのように呼び出すと思いますか? – jtbandes

答えて

3

どのようにちょうどそうのような、@autoclosureの使用に関する:なぜあなたは `` を使用している

func anyFunc<T>(_ closure: @autoclosure() -> T) { 
    let result: T = closure() 
    // TODO: Do something with result? 
} 

anyFunc(print("hello")) 
+0

これは私が必要としていたものです!私は '@ autoclosure'について知らなかった。私は最後に 'T'と' return result'の戻り値の型を追加しました。ありがとう – ilovebigmacs

関連する問題