如果我们再查看结构UnicodeScalar
,我们会看到这个初始化器:
init(_ v: UInt32)
但你可以毫无问题地做到这一点:
println(UnicodeScalar("a").value)
打印出来:
97
但如果你尝试这样做:
let a : Character = "a" // With String gave error too
println(UnicodeScalar(a).value)
它会给你一个关于UnicodeScalar
结构的初始值设定项的错误。
我假设在第一种情况下它会在初始化器中进行隐式转换或其他操作,但为什么不在第二种情况下呢?
如何使用声明的变量来避免seconde案例中的错误?
答案 0 :(得分:4)
"a"
与a
不同。 a
是一个变量,因此其类型为Character或String。 "a"
是文字,其类型为StringLiteralConvertible。这就是"a"
可以在a
无法使用的地方使用的原因。
(对于Swift中的文字也是如此。您可以在不能使用值为9的Int变量的地方使用文字9
。)
也许你正在寻找这样的东西:
let c = "a"
let v = c.unicodeScalars
let u = v[v.startIndex]
println(u.value)