Основы Swift / 2.7. Типобезопасность и выведение типов


Видео


Типобезопасность
Swift - это типобезопасный язык. Это позволяет Вам не беспокоиться о типах значений, с которыми может работать Ваш код. Если часть Вашего кода ожидает String, Вы не можете по ошибке передать в него Int.

Так как Swift типобезопасен, то он производит проверку типов во время сборки Вашего кода и помечает все несовпадения как ошибки. Типобезопасность помогает Вам отслеживать и исправлять ошибки настолько рано, насколько это возможно в процессе разработки.

Контроль типов помогает Вам избегать ошибок, когда Вы работаете с разными типами данных. Однако, это не значит, что Вам нужно явно указывать тип каждой константы или переменной, объявляемой Вами. Если Вы не укажете тип величины, нужный Вам, Swift воспользуется дедукцией типов для выяснения подходящего типа. Выведение типов позволяет Вашему компилятору дедуцировать тип отдельного выражения автоматически, когда он собирает Ваш код, на основании значений, предоставленных Вами.

Посмотрим, что случится, если присвоить переменной типа Int значение типа String: упс, ошибка компиляции:
@{2.7\1}
                    
var integer: Int = "Я есть строка"
                    
                
В этом примере переменной integer с явно заданным типом Int мы присвоили строку "Я есть строка" в качестве изначального значения. Если бы мы бы не указали бы тип Int явно, то типовыведение распознало бы тип переменной по изначальному значению и ошибки не было бы.
Типобезопасность 2
А если сделать то же самое, но в процессе работы программы? Ошибка:
@{2.7\2}
                    
var integer = 21
integer = "А я есть Грут"
                    
                
В этом примере переменная типа Int задана через числовой литерал 21 и на этом этапе всё хорошо. Однако дальше мы пытаемся присвоить ей строку "А я есть Грут", что так же приведёт к ошибке компиляции.
Выведение типов
Ввиду наличия типовыведения Swift требуется чуть меньше деклараций [синоним слову объявление] типов, чем языкам наподобие C и Objective-C. Однако константы и переменные всё так же требуют явного указания своего статуса.

Типовыведение хорошо применимо, когда Вы объявляете величину с изначально заданным значением. Это часто делается путём присвоения литерального значения (или литерала) величине в точке её объявления. (Литеральное значение - это значение, которое указывается непосредственно в Вашем коде, такое как 11 или 61.11 из примеров ниже.)

Например, если Вы присвоите литеральное значение 11 новой константе без сообщения её типа, Swift выведет, что Вы хотели сделать константу типа Int, потому что Вы инициализируете его числом, которое выглядит как целое число:
@{2.7\3}
                    
let numberOfNeymar = 11
                    
                
Выведение типов по литералу
Также, если Вы не укажете тип для литерала числа с плавающей запятой, Swift выведет, что Вы хотите создать экземпляр типа Double:
@{2.7\4}
                    
let someDouble = 61.11
                    
                
Double предпочтительнее Float
Swift всегда выбирает Double вместо Float, когда выводит тип числа с плавающей запятой.

Если Вы складываете целочисленный литерал с литералом с плавающей запятой в выражении, то тип Double будет выведен из контекста:
@{2.7\5}
                    
let pi = 3 + 0.14159
                    
                
Литеральное значение 3 не имеет явного типа. В результате сложения будет получено значение с плавающей точкой, а значит будет выведен тип Double.