Безопасность типов и подбор(inference) типов
Swift является языком с типовой безопасностью. Типовая безопасность позволяет вам быть точным о типах значений, с которыми работает ваш код. Если кусок кода ожидает строковый тип, вы не сможете по ошибке передать туда число.
Поскольку Swift безопасен, он выполняет проверки типов при компиляции кода и помечает любые несоответствующие типы как ошибки, что позволяет вам ловить их максимально рано при разработке.
Проверка типов позволяет вам избежать ошибок, когда вы работаете с разными типами значений. Однако, это не означает, что вам обязательно объявлять тип каждой константы или переменной — если вы не объявите тип сами, Swift использует подбор(inference) типа для определения подходящего типа. Интерфейс типа позволяет компилятору делать вывод о типе по операциям в вашем коде во время компиляции.
Из-за подбора типа, Swift требует гораздо меньше объявлений, чем языки типа С или Objective-C. Константы и переменные по прежнему явно типизированы, но большинство работы по определению типа сделано за вас.
Подбор типа особенно полезен, когда вы объявляете константу или переменную с начальным значением — это часто делается с помощью присвоения литерального значения (литерала) константе или переменной в момент ее объявления. Литерал — это просто значение, которое появляется в вашем коде, например 42 или 3.14159.
Например, если вы присваиваете литерал 42 новой константе без объявления ее типа, Swift автоматически догадывается, что тип вашей константы — Int, поскольку вы инициализируете ее числом, похожим на целое число:
1 2 |
let meaningOfLife = 42 // meaningOfLife автоматически становится Int |
Точно так же, если вы не указываете тип для литерала с плавающей точкой, Swift предположит, что вы хотите использовать тип Double:
1 2 |
let pi = 3.14159 // pi имеет тип Double |
Swift всегда выбирает Double, а не Float, если вы не указываете тип явно.
Если вы совместите в одной строке целочисленный литерал и литерал с плавающей точкой, тип будет также Double:
1 2 |
let anotherPi = 3 + 0.14159 // anotherPi - также Double |
Литеральное значение 3 не имеет заданного типа, зато компилятор видит присутствие плавающей точки — поэтому и назначает тип Double.