2015-04-28 2 views
20

Мне просто интересно, если Swift динамичен, как php или static, я имею в виду, могу ли я генерировать классы во время работы приложения?Является ли Swift динамическим или статическим языком?

+0

Что касается http://stackoverflow.com/questions/24008234/swift-language-static-or-dynamically-dispatched comment, это выглядит как быстрое и статическое и динамическое –

ответ

34

Статический - очень статический. Компилятор должен иметь всю информацию обо всех классах и функциях во время компиляции. Вы можете «расширить» существующий класс (с extension), но даже тогда вы должны полностью определить во время компиляции то, из чего состоит это расширение.

Объектив-C является динамическим, и поскольку в реальной жизни вы, вероятно, будете использовать Swift в присутствии Cocoa, вы можете использовать среду выполнения Objective-C для внедрения/swizzle-методов в классе Swift, который подвергается воздействию Objective-C. Вы можете сделать это, даже если вы говорите на языке Swift. Но Swift сам является статичным и на самом деле явно разработан для минимизации или исключения использования динамизма типа Objective-C.

+1

Я не знаю php, но я знаю Ruby, и вообще я бы сказал, что Свифт - это полная противоположность Руби. Ruby имеет «утиную печать»; У Swift есть строгая компиляция. Ruby определяет свои классы во время выполнения (определения классов сами являются исполняемыми операторами); Swift определяет свои классы во время компиляции. Ruby может открывать класс и вводить методы, которые формируются динамически; Свифт не может. – matt

1

Как правило, вы никогда не говорите статический язык. Вы можете сказать, что язык статического типа или язык динамического типа, и вы также можете говорить о сильном типе или нет.

Таким образом, Java представляет собой язык статического типа, а также язык сильного типа, поскольку компилятор не имеет возможности автоматически определять тип, поэтому он является статическим, а тип сильно ограничен, поэтому он также является сильным типом.

И javascript - это язык динамического типа и язык несильного типа. Поскольку компилятор имеет возможность обнаруживать тип во время выполнения, а тип также строго не ограничен.

Итак, на основе приведенных выше примеров вы можете сказать, что быстрый способ позволяет нам не объявлять тип и оставлять компилятор для определения типа самостоятельно, поэтому оператор swift объявляется официальным языком динамического типа. И это также сильный язык типа, который вы должны использовать строго, когда даже вы не объявляете тип, если компилятор обнаруживает, что это строка, то это не какой-либо другой тип.

Надеюсь, это полезно.

+0

Это прямо противоречит ответу @ matt? –

3

Быстрое начало, статически типизировано. При использовании с Cocoa вы получаете доступ к библиотеке времени выполнения-c, которая дает вам возможность использовать динамические классы, сообщения и все. Это не означает, что сам язык динамически типизирован. Вы можете сделать то же самое с C или любым другим языком, который поддерживает мост до C, используя libobjc.A.dylib.

0

Только если вы хотите использовать объективную библиотеку c. Swift по своей сути статична. Они просто дают вам интерфейс, так что вы можете постепенно перейти к быстрому.

Смежные вопросы