阅读documentation和this answer,我发现我可以通过以下任一方式初始化Unicode字符:
let narrowNonBreakingSpace: Character = "\u{202f}"
let narrowNonBreakingSpace = "\u{202f}"
据我所知,第二个实际上是一个字符串。与Java不同,它们都使用双引号(而不是单引号)。不过,我已经看过几个例子,即使变量只包含一个字符,也会使用第二种形式(没有Character
)。这些人只是懒惰还是忘记写Character
?或者Swift会处理所有细节,我不需要为此烦恼吗?如果我知道我有一个只包含一个Unicode值的常量,我应该总是使用Character
吗?
答案 0 :(得分:5)
当未指定类型时,无论长度如何,Swift都会在创建变量或常量时从字符串文字中创建String
实例。由于String
在Swift和Cocoa / Foundation方法中如此普遍,除非您特别需要Character
,否则应该使用它 - 否则您只需要转换为{{ 1}}每次你需要使用它。
答案 1 :(得分:-2)
Swift编译器将在第二种情况下推断字符串的类型实际上是字符。因此不需要添加: Character
。在这种情况下,我会添加它,因为它很容易错误地认为这个字符是一个字符串而另一个开发人员可能会试图这样对待它。但是,编译器会抛出错误,因为它推断出这个String的类型不是String而是Character。
所以在我看来,添加Character不是懒惰或忘记它的问题,它是一个信任编译器正确推断这个常量en的类型依赖于编译器抛出正确错误的问题。试着用这个常数错误。
Swift的编译器基本上处理所有细节,如果添加Character
并不重要,编译器将(应该)处理它。