如果然后查看struct UnicodeScalar,则会看到此初始化程序:

init(_ v: UInt32)

但是您可以做到这一点而没有任何问题:
println(UnicodeScalar("a").value)

它打印出来:
97

但是,如果您尝试这样做:
let a : Character = "a"  // With String gave error too
println(UnicodeScalar(a).value)

它给您有关UnicodeScalar结构的初始化程序的错误。

我假设在第一种情况下,它会在初始化程序中进行隐式强制转换或其他操作,但是为什么在第二种情况下不?

如何使用已声明的变量避免在第二种情况下出错?

最佳答案

"a"a不同。 a是变量,因此其类型为字符或字符串。 "a"是文字,其类型为StringLiteralConvertible。这就是为什么可以在无法使用"a"的地方使用a的原因。

(在Swift中,一般的文字也是如此。您可以在无法使用值为9的Int变量的地方使用文字9。)

也许您正在寻找这样的东西:

let c  = "a"
let v = c.unicodeScalars
let u = v[v.startIndex]
println(u.value)

08-27 05:27