Персонажи и строки в Swift - программирование

Персонажи и строки в Swift

Считывая documentation и этот ответ, я вижу, что я может инициализировать символ Unicode одним из следующих способов:

let narrowNonBreakingSpace: Character = "\u{202f}"
let narrowNonBreakingSpace = "\u{202f}"

Как я понимаю, второй на самом деле был бы String. И в отличие от Java, оба из них используют двойные кавычки (а не одинарные кавычки для символов). Однако я видел несколько примеров, где используется вторая форма (без Character), хотя переменная содержит только один символ. Неужели люди просто ленивы или забывают написать Character? Или Swift заботится обо всех деталях, и мне не нужно это беспокоиться? Если я знаю, что у меня есть константа, которая содержит только одно значение Unicode, я должен всегда использовать Character?

4b9b3361

Ответ 1

Если тип не указан, Swift создаст экземпляр String из строкового литерала при создании переменной или константы, независимо от длины. Поскольку String настолько распространены в Swift и Cocoa/Foundation методы, вы должны просто использовать это, если у вас нет конкретной потребности в Character - иначе вам просто нужно будет преобразовать в String каждый раз, когда вам нужно использовать его.

Ответ 2

Компилятор Swift выведет тип строки, чтобы фактически быть символом во втором случае. Добавление : Character для этого не требуется. В этом случае я бы добавил, хотя, потому что легко ошибочно предположить, что этот символ является строкой, а другой разработчик может попытаться рассматривать его как таковой. Однако компилятор будет вызывать ошибки из-за этого, поскольку он выводил тип этой строки, чтобы не быть строкой, а символом.

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

Компилятор Swift в основном заботится обо всех деталях, и на самом деле не имеет значения, добавляете ли вы Character, компилятор будет (должен) позаботиться об этом.