Swift中的字符和字符串

阅读文档和这个答案 ,我发现我可以通过以下任一方式初始化Unicode字符:

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

据我所知,第二个实际上是一个字符串。 与Java不同,它们都使用双引号(而不是单引号)。 不过,我已经看过几个例子,即使变量只包含一个字符,也会使用第二种forms(没有Character )。 这些人只是懒惰还是忘记写字? 或者Swift会处理所有细节,我不需要为此烦恼吗? 如果我知道我有一个只包含一个Unicode值的常量,我应该总是使用Character吗?

当未指定类型时,无论长度如何,Swift都会在创建变量或常量时从字符串文字中创建String实例。 由于String在Swift和Cocoa / Foundation方法中非常流行,所以你应该只使用它,除非你特别需要一个Character否则你每次需要使用它时都需要转换为String

在第二种情况下,Swift编译器将推断字符串的类型实际上是字符。 添加: Character因此不需要: Character 。 在这种情况下,我会添加它,因为很容易错误地认为这个字符是一个字符串而另一个开发人员可能会试图这样对待它。 但是,编译器会抛出错误,因为它推断出此String的类型不是String而是Character。

所以在我看来添加Character不是懒惰或忘记它的问题,这是一个信任编译器正确推断这个常量en的类型的问题依赖于编译器在我尝试使用这个常量错误时抛出正确的错误。

Swift的编译器基本上处理所有细节,如果你添加Character没关系,编译器会(应该)处理它。