2015-01-10 4 views
24

Я очень новой для быстрого языкаЕсть ли способ быстро объявить встроенную функцию?

Я хотел объявить функцию инлайн так же, как в C++ так что моя забавная декларация как

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

и я хочу ти сделать что-то вроде

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

Я попытался найти в Интернете, но я не нашел ничего подходящего , возможно, нет встроенного ключевого слова, но, возможно, есть еще один способ встроить функцию

Большое спасибо :)

+2

Зачем вам это нужно? – Emil

+3

Я хочу сократить время вызова функции, я знаю, что она будет расширяться, а мой исходный код будет больше, но я хочу сделать контрольный показатель. , но сначала мне нужно знать, как сделать встроенный быстрый! – Gibnem

+1

Ну, насколько я знаю, Swift не имеет встроенных функций, таких как C++, и, честно говоря, я не вижу, как это вообще сокращает время для вызова функции. Swift в основном отличается от языка C++. – Emil

ответ

36

Swift 1.2 будет включать в себя атрибут @inline, с never и __always в качестве параметров. Для получения дополнительной информации см. here.

Как уже говорилось ранее, вам редко нужно объявлять функцию явно как @inline(__always), потому что Swift довольно умна, когда встроить функцию. Однако в некотором коде не может быть необходимости иметь встроенную функцию.

+2

«Однако в некотором коде может не понадобиться встроенная функция». Не могли бы вы привести пример в образовательных целях? – user965972

+0

Ссылка на дополнительную информацию показывает один случай использования. – MaddTheSane

+0

@ user965972 Рекурсивные функции, например. Обратите внимание, что некоторые рекурсивные функции могут быть проигнорированы в цикле, но некоторые функции по своей природе рекурсивные, см. [Это отличное видео] (https://www.youtube.com/watch?v=i7sm9dzFtEI). –

5

Все кредиты answer, просто подытоживая информацию из link.

Для того, чтобы функция инлайн просто добавить @inline(__always) перед функцией:

@inline(__always) func myFunction() { 

} 

Тем не менее, стоит рассмотреть и узнать о различных возможностях. Есть три возможных пути к инлайн:

  • иногда - убеждается иногда встраивать функцию. Это поведение по умолчанию, вам ничего не нужно делать! Компилятор Swift может автоматически включать функции в качестве оптимизации.
  • всегда - обязательно включите функцию. Достичь этого поведения, добавив @inline(__always) перед функцией. Используйте «если ваша функция довольно мала, и вы предпочтете, чтобы ваше приложение работало быстрее».
  • never - не забудьте никогда не включать функцию. Это может быть достигнуто путем добавления @inline(never) перед функцией. Используйте «если ваша функция довольно длинная, и вы хотите избежать увеличения размера сегмента кода».
Смежные вопросы