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

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

 init(_ v: UInt32) 

但是你可以做到这一点没有任何问题:

 println(UnicodeScalar("a").value) 

它打印出来:

 97 

但是,如果你尝试这样做:

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

它给你一个关于UnicodeScalar结构的初始值设定的UnicodeScalar

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

如何避免使用声明的variables在第二个案件的错误?

"a"不是像aa是一个variables,所以它的types是Character或String。 "a"是一个文字 ,它的types是StringLiteralConvertible。 这就是为什么"a"可以用在不能使用的地方。

(对于Swift中的常规字面也是如此,你可以在不能使用值为9的Intvariables的地方使用字面值9

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

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