了解Swift中的UnicodeScalar初始值设定项

时间:2015-05-19 18:50:11

标签: ios string swift unicode

如果我们再查看结构UnicodeScalar,我们会看到这个初始化器:

init(_ v: UInt32)

但你可以毫无问题地做到这一点:

println(UnicodeScalar("a").value)

打印出来:

97

但如果你尝试这样做:

let a : Character = "a"  // With String gave error too        
println(UnicodeScalar(a).value)

它会给你一个关于UnicodeScalar结构的初始值设定项的错误。

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

如何使用声明的变量来避免seconde案例中的错误?

1 个答案:

答案 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)