В чем разница между типом безопасности и типом вывода?

Как они отличаются? Я немного запутался, потому что они, похоже, похожи на понятия.

Ответ 1

Из Swift own documentation:

Безопасность типов

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

var welcomeMessage: String
welcomeMessage = 22 // this would create an error because you  
//already specified that it going to be a String

Вывод типа

Если вы dont укажите тип требуемого значения, Swift использует вывод типа для выработки соответствующего типа. Вывод типа позволяет компилятору автоматически выводить тип конкретного выражения, когда он компилирует ваш код, просто изучая предоставленные вами значения.

var meaningOfLife = 42 // meaningOfLife is inferred to be of type Int
meaningOfLife = 55 // it Works, because 55 is an Int

Тип безопасности и вывод типа вместе

var meaningOfLife = 42 // 'Type inference' happened here, we didn't specify that this an Int, the compiler itself found out.
meaningOfLife = 55 // it Works, because 55 is an Int
meaningOfLife = "SomeString" // Because of 'Type Safety' ability you will get an 
//error message: 'cannot assign value of type 'String' to type 'Int''