2015-01-10 2 views
24

Sono molto nuovo per il linguaggio rapidoC'è un modo per dichiarare una funzione inline?

ho voluto per dichiarare una funzione inline, proprio come in C++ così la mia dichiarazione divertente è come

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

e voglio ti fare qualcosa di simile

Ho provato a cercare sul web ma non ho trovato nulla di rilevante forse non c'è una parola chiave inline ma forse c'è un altro modo per inline la funzione

Grazie :)

+2

Perché vuoi farlo? – Emil

+3

Voglio ridurre il tempo per la chiamata di funzione, so che si espanderà e il mio codice sorgente sarà più grande ma volevo fare un punto di riferimento. ma prima devo sapere come fare inline in swift! – Gibnem

+1

Bene, per quanto ne so Swift non ha funzionalità inline come C++, e onestamente, non vedo come questo possa ridurre del tutto il tempo per una chiamata di funzione. Swift è fondamentalmente una lingua molto diversa dal C++. – Emil

risposta

36

Swift 1.2 comprenderanno l'attributo @inline, con never e __always come parametri. Per maggiori informazioni, vedi here.

Come affermato in precedenza, è raramente necessario dichiarare esplicitamente una funzione come @inline(__always) perché Swift è abbastanza intelligente quando inserire una funzione in linea. Non avere una funzione inline, tuttavia, può essere necessario in alcuni codici.

+2

"Non avere una funzione inline, tuttavia, può essere necessario in alcuni codici." Potresti fare un esempio, a scopo didattico? – user965972

+0

Il link per maggiori informazioni mostra un caso d'uso. – MaddTheSane

+0

@ user965972 Funzioni ricorsive, ad esempio. Nota che alcune funzioni ricorsive possono essere eliminate in un ciclo, ma alcune funzioni sono intrinsecamente ricorsive, vedi [questo grande video] (https://www.youtube.com/watch?v=i7sm9dzFtEI). –

5

Tutto il credito allo answer, solo riepilogando le informazioni dallo link.

Per effettuare una funzione inline basta aggiungere @inline(__always) prima che la funzione:

@inline(__always) func myFunction() { 

} 

Tuttavia, vale la pena considerare e conoscere le diverse possibilità. Ci sono tre possibili modi per linea:

  • volte - farà in modo di inline a volte la funzione. Questo è il comportamento predefinito, non devi fare nulla! Il compilatore Swift potrebbe automaticamente integrare le funzioni come ottimizzazione.
  • sempre - farà in modo di allineare sempre la funzione. Ottenere questo comportamento aggiungendo @inline(__always) prima della funzione. Usa "se la tua funzione è piuttosto piccola e preferisci che la tua app sia più veloce".
  • mai - farà in modo di non integrare mai la funzione. Questo può essere ottenuto aggiungendo @inline(never) prima della funzione. Usa "se la tua funzione è piuttosto lunga e vuoi evitare di aumentare la dimensione del tuo segmento di codice".