Вы можете инициализировать Double
, Float
, CGFloat
, Int
, et c. с целочисленными литералами, потому что все вышеперечисленное соответствует протоколу ExpressibleByIntegerLiteral . За кулисами инициализация литералом просто вызывает метод init(integerLiteral:)
соответствующего типа.
Аналогично, существует протокол ExpressibleByFloatLiteral , который обрабатывает инициализацию с литералами с плавающей запятой, и этот протокол имеет инициализатор, который также должен быть реализован с помощью соответствующих типов.
Что касается использования, это вопрос личных предпочтений и стиля. Оба способа инициализации действительны, и если вы не выполните тысячи инициализаций, разница в производительности будет незначительной.