2015-01-10 11 views
24

私はので、私の楽しみの宣言はすぐにインライン関数を宣言する方法はありますか?

func MyFunction(param: Int) -> Int { 
... 
... 
... 
} 

のようなもので、私は、TIが

ような何かをしたいだけで、C++ のようにインライン関数を宣言したかった迅速な言語

に非常に新しいです

inline func MyFunction(param: Int) -> Int { 
... 
... 
... 
} 

私はウェブ上で検索しようとしましたが、関連するものは何も見つかりませんでした おそらくインラインキーワードがありませんが、おそらく別の方法でインライン関数があります

多くの感謝:)

+2

なぜこれをやりたいですか? – Emil

+3

私は関数呼び出しの時間を短縮したい、私はそれが拡大し、私のソースコードが大きくなることを知っているが、私はベンチマークを作りたかった。 しかし、まず私は迅速にインラインで行う方法を知る必要があります! – Gibnem

+1

SwiftにはC++のようなインライン関数はありません。正直なところ、関数呼び出しの時間を短縮する方法はわかりません。 Swiftは基本的にC++とは非常に異なる言語です。 – Emil

答えて

36

スウィフト1.2は、パラメータとしてnever__always@inline属性が含まれます。詳細は、hereを参照してください。

前述のように、Swiftは関数をインライン化するタイミングに関してかなりスマートなので、関数を明示的に@inline(__always)として宣言する必要はほとんどありません。ただし、関数をインライン化していないと、コードによっては必要になることがあります。

+2

"ただし、関数をインライン化していないと、コードによっては必要になることがあります。教育目的のために例を挙げてください。 – user965972

+0

詳細情報のリンクはユースケースを示しています。 – MaddTheSane

+0

@ user965972たとえば、再帰関数。一部の再帰関数はループに取り消されますが、いくつかの関数は本質的に再帰的です([this great video](https://www.youtube.com/watch?v=i7sm9dzFtEI)を参照)。 –

5

answerへのすべてのクレジットは、linkからの情報を要約するだけです。

は、関数をインラインだけで機能する前 @inline(__always)を追加するには:

@inline(__always) func myFunction() { 

} 

しかし、それは考慮してさまざまな可能性についての学習の価値があります。

  • 時々 - 時々機能をインライン化することを確認します:インラインへの3つの方法があります。これはデフォルトの動作です。何もする必要はありません!スウィフトコンパイラは自動的に最適化として関数をインライン展開することがあります。
  • 常に - 常に関数をインライン化します。関数の前に@inline(__always)を追加することで、この動作を実現します。あなたの機能が比較的小さく、あなたのアプリがより速く走ってほしいと思うならば、 "を使用してください。
  • - 決して機能をインライン化しないようにします。これは、関数の前に@inline(never)を追加することで実現できます。関数がかなり長く、コードセグメントのサイズを増やさないようにしたい場合は "を使用してください。"
関連する問題