2015-01-10 17 views
24

Jestem bardzo nowe do szybkiego językuCzy istnieje szybka metoda deklarowania funkcji inline?

chciałem zadeklarować funkcji inline, podobnie jak w C++ więc moja deklaracja zabawa jest jak

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

i chcę ti zrobić coś

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

Próbowałem wyszukiwać w Internecie, ale nie znalazłem nic istotnego Może nie ma wpisanego słowa kluczowego, ale być może istnieje inny sposób wstawienia funkcji

Dziękujemy :)

+2

Dlaczego chcesz to zrobić? – Emil

+3

Chcę skrócić czas wywoływania funkcji, wiem, że się rozwinie, a mój kod źródłowy będzie większy, ale chciałem zrobić test porównawczy. , ale najpierw muszę wiedzieć, jak zrobić inline w szybkim tempie! – Gibnem

+1

Cóż, o ile mi wiadomo, Swift nie ma wbudowanej funkcjonalności, takiej jak C++, i szczerze mówiąc, nie widzę jak to w ogóle zmniejszyć czas wywoływania funkcji. Swift to zasadniczo zupełnie inny język niż C++. – Emil

Odpowiedz

36

Swift 1.2 będzie zawierać atrybut @inline, z never i __always jako parametry. Aby uzyskać więcej informacji, zobacz here.

Jak wcześniej wspomniano, rzadko trzeba zadeklarować funkcję jawnie jako @inline(__always), ponieważ Swift jest dość sprytny, kiedy wstawiać funkcję. W niektórych kodach może jednak nie być wymagana funkcja inline.

+2

"Brak funkcji z linią wewnętrzną może być jednak niezbędny w niektórych kodach." Czy mógłbyś podać przykład dla celów edukacyjnych? – user965972

+0

Łącze do dodatkowych informacji pokazuje jeden przypadek użycia. – MaddTheSane

+0

@ user965972 Funkcje rekurencyjne, na przykład. Zauważ, że niektóre funkcje rekurencyjne mogą zostać wykreślone z pętli, ale niektóre funkcje są z natury rekursywne, zobacz [ten świetny film] (https://www.youtube.com/watch?v=i7sm9dzFtEI). –

5

Wszystkie podziękowania za answer, tylko podsumowanie informacji z link.

Aby funkcja inline wystarczy dodać @inline(__always) przed funkcji:

@inline(__always) func myFunction() { 

} 

Jednak warto zastanowić się i uczenia się o różnych możliwościach. Istnieją trzy możliwe sposoby inline:

  • czasami - zadba czasami inline funkcję. Jest to domyślne zachowanie, nie musisz nic robić! Kompilator Swift może automatycznie wstawiać funkcje jako optymalizację.
  • zawsze - spowoduje, że funkcja będzie zawsze wstawiana. Osiągnij to zachowanie, dodając przed funkcją @inline(__always). Użyj "jeśli twoja funkcja jest raczej mała i wolisz, aby twoja aplikacja działała szybciej."
  • Nigdy - spowoduje, że nigdy nie będzie wbudowana funkcja. Można to osiągnąć dodając przed funkcją @inline(never). Użyj "jeśli twoja funkcja jest dość długa i nie chcesz zwiększać rozmiaru segmentu kodu."
Powiązane problemy