【问题标题】:Characters and Strings in SwiftSwift 中的字符和字符串
【发布时间】:2015-09-08 02:26:06
【问题描述】:

阅读documentation和this answer,我发现我可以通过以下任一方式初始化一个Unicode字符:

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

据我了解,第二个实际上是一个字符串。与 Java 不同的是,它们都使用双引号(而不是字符的单引号)。不过,我见过几个例子,其中使用了第二种形式(没有Character),即使变量只包含一个字符。那是人们只是懒惰还是忘记写Character?还是 Swift 会处理所有细节,而我不需要费心?如果我知道我有一个只包含一个 Unicode 值的常量,我是否应该始终使用 Character?

【问题讨论】:

  • 我不明白这个问题。字符串和字符是不同的类型。如果您需要一个字符串,则创建一个字符串(包含 0、1 或更多字符)。如果你需要一个角色然后创建一个角色。
  • 所以任何时候我需要一个字符我都应该用Character明确指定它,而不是让编译器来推断,对吗?这两种形式有性能差异吗?

标签: ios string swift unicode character


【解决方案1】:

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

【讨论】:

  • 我想我想了解Character 的“特定需求”是什么,如果我可以让它成为一个字符串。我喜欢你的回答,因为它使编程更容易。当涉及大量 Unicode 文本处理(比较字符、在字典中查找等)时,我只是担心性能问题。
  • 您可能永远不会遇到特定需求,除非您正在编写一个真正单独查看字符串中字符的例程。回复:性能,我对 Swift 的全面建议是使用默认值并将优化留给编译器,除非你已经证明存在实际问题。
【解决方案2】:

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

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

Swift 的编译器基本上会处理所有细节,添加Character 并不重要,编译器会(应该)处理它。

【讨论】:

  • 这是错误的或至少具有误导性。第二行 let narrowNonBreakingSpace = "\u{202f}" 创建一个字符串而不是字符。编译器不会将类型推断为该语句中的字符。
  • 谢谢,我确信这就是它的工作原理,因为这两个语句都输出一个不间断的空格,我有点期待如果let narrowNonBreakingSpace = "\u{202f}" 是一个字符串,它会输出文字字符串。今天我学会了,我猜:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多