Персонажи и строки в Swift
Считывая documentation и этот ответ, я вижу, что я может инициализировать символ Unicode одним из следующих способов:
let narrowNonBreakingSpace: Character = "\u{202f}"
let narrowNonBreakingSpace = "\u{202f}"
Как я понимаю, второй на самом деле был бы String. И в отличие от Java, оба из них используют двойные кавычки (а не одинарные кавычки для символов). Однако я видел несколько примеров, где используется вторая форма (без Character
), хотя переменная содержит только один символ. Неужели люди просто ленивы или забывают написать Character
? Или Swift заботится обо всех деталях, и мне не нужно это беспокоиться? Если я знаю, что у меня есть константа, которая содержит только одно значение Unicode, я должен всегда использовать Character
?
Ответы
Ответ 1
Если тип не указан, Swift создаст экземпляр String
из строкового литерала при создании переменной или константы, независимо от длины. Поскольку String
настолько распространены в Swift и Cocoa/Foundation методы, вы должны просто использовать это, если у вас нет конкретной потребности в Character
- иначе вам просто нужно будет преобразовать в String
каждый раз, когда вам нужно использовать его.
Ответ 2
Компилятор Swift выведет тип строки, чтобы фактически быть символом во втором случае. Добавление : Character
для этого не требуется. В этом случае я бы добавил, хотя, потому что легко ошибочно предположить, что этот символ является строкой, а другой разработчик может попытаться рассматривать его как таковой. Однако компилятор будет вызывать ошибки из-за этого, поскольку он выводил тип этой строки, чтобы не быть строкой, а символом.
Итак, по-моему, добавление персонажа - это не вопрос ленивости или забывания, это вопрос доверять компилятору, чтобы правильно вывести тип этой константы en, чтобы полагаться на компилятор, бросая правильную ошибку всякий раз, когда я пытаюсь использовать эта константа неправильная.
Компилятор Swift в основном заботится обо всех деталях, и на самом деле не имеет значения, добавляете ли вы Character
, компилятор будет (должен) позаботиться об этом.