【问题标题】:Understanding UnicodeScalar initializers in Swift理解 Swift 中的 UnicodeScalar 初始化器
【发布时间】:2015-07-31 18:19:22
【问题描述】:

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

init(_ v: UInt32)

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

println(UnicodeScalar("a").value)

它打印出来:

97

但如果你尝试这样做:

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

它给你一个关于 UnicodeScalar 结构的初始化器的错误。

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

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

【问题讨论】:

    标签: ios string swift unicode


    【解决方案1】:

    "a" 不像 aa 是一个变量,所以它的类型是字符或字符串。 "a" 是一个 literal,它的类型是 StringLiteralConvertible。所以"a"可以用在a不能用的地方。

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

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

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

    【讨论】:

    • 但我也不能这样做let a : StringLiteralConvertible = "a"。请你解释一下是否有办法做到这一点?
    • 抱歉,有什么办法吗?我不明白。你的问题不是如何任何事情,而是为什么做某事。
    • 对不起@matt,我的错误,我要问的是,在第二种情况下,是否有办法通过声明的变量避免此错误?
    • 别抱歉,我只是没有抓住这个问题。我已经扩展了我的答案以提供一些可能有用的代码。
    • 感谢您的回答,真的很有帮助!
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多