【问题标题】:How to create a single character String如何创建单个字符串
【发布时间】:2017-02-21 00:03:39
【问题描述】:

我已经在 Swift 操场上重现了这个问题,但还没有解决...

我想在 UILabel 中打印一系列字符中的一个。如果我明确声明该角色,它会起作用:

// This works.
let value: String = "\u{f096}"
label.text = value  // Displays the referenced character.

但是,我想构造字符串。下面的代码似乎产生了与上面的行相同的结果,除了它没有。它只生成字符串\u{f096},而不是它引用的字符。

// This doesn't work
let n: Int = 0x95 + 1
print(String(n, radix: 16))  // Prints "96".
let value: String = "\\u{f0\(String(n, radix: 16))}"
label.text = value  // Displays the String "\u{f096}".

我可能遗漏了一些简单的东西。有什么想法吗?

【问题讨论】:

  • 可能只是"\\u{f0\(String(n,radix: 16))}" 中多余的“\”?只是猜测 - 我不知道字符串格式如何快速工作。
  • 同意它可能是,但它不会编译。这就是为什么我在发布之前在操场上重现了这个问题。我收到错误:Scratch.playground:7:27: Expected '}' in \u{...} 转义序列
  • 同样的问题。最初的反斜杠仍然需要转义,结果字符串显示为 "\u{f096}" 而不是必需的字符。

标签: swift swift3


【解决方案1】:

停止使用字符串转换voodoo并使用标准库类型UnicodeScalar怎么样?

您还可以直接从数字表示创建 Unicode 标量值。

let airplane = UnicodeScalar(9992)
print(airplane) 
// Prints "✈︎"

UnicodeScalar.init 实际上是返回可选值,所以你必须打开它。

如果您需要String,只需将其通过Character 类型转换为字符串即可。

let airplaneString: String = String(Character(airplane)) // Assuming that airplane here is unwrapped

【讨论】:

  • 做到了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2017-02-19
  • 2012-03-12
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多